{
 "cells": [
  {
   "metadata": {},
   "cell_type": "markdown",
   "source": [
    "# 泰坦尼克号-灾难中的机器学习（逻辑回归）\n",
    "\n",
    "![](./../img/1.png)"
   ],
   "id": "eb799e0fa88b2258"
  },
  {
   "metadata": {},
   "cell_type": "markdown",
   "source": [
    "**其他练习：**\n",
    "\n",
    "信用卡欺诈检测: https://www.kaggle.com/datasets/mlg-ulb/creditcardfraud\n",
    "\n",
    "电信客户流失: https://www.kaggle.com/datasets/blastchar/telco-customer-churn"
   ],
   "id": "a28dbff78e35f8c5"
  },
  {
   "metadata": {},
   "cell_type": "markdown",
   "source": [
    "## 一、数据集描述\n",
    "\n",
    "|     特征      |    定义     |                                   其他                                    |\n",
    "|:-----------:|:---------:|:-----------------------------------------------------------------------:|\n",
    "| PassengerId |    ID     |                                    \\                                    |\n",
    "|  Survived   |   是否幸存    |                            \t0 = No, 1 = Yes                             |\n",
    "|   Pclass    |    票类     |           \t1 = 1st (Upper), 2 = 2nd (Middle), 3 = 3rd (Lower)           |\n",
    "|    Name     |    姓名     |                                    \\                                    |\n",
    "|     Sex     |    性别     |                           male 男性, female 女性                            |\n",
    "|     Age     |    年龄     |                              如果年龄小于1，则为小数                               |\n",
    "|    SibSp    | 兄弟姐妹/配偶人数 |          兄弟姐妹 = 兄弟 + 姐妹 + 继兄弟 + 继姐妹<br/>配偶 = 丈夫 + 妻子（情妇和未婚夫除外）          |\n",
    "|    Parch    |   父母/孩子   | 父母 = 母亲 + 父亲<br/>孩子 = 女儿 + 儿子 + 继女 + 继子<br/>有些孩子只和保姆一起旅行，因此对他们来说parch=0 |\n",
    "|   Ticket    |   船票号码    |                                用于区分不同的乘客                                |\n",
    "|    Fare     |    票价     |                                   英镑                                    |\n",
    "|    Cabin    |    舱室     |                                乘客所住的船舱编号                                |\n",
    "|  Embarked   |   登船港口    |             C = Cherbourg, Q = Queenstown, S = Southampton              |"
   ],
   "id": "208004156469a843"
  },
  {
   "metadata": {},
   "cell_type": "markdown",
   "source": [
    "**数据初步考量：**\n",
    "1. Passenferid：记录ID\n",
    "2. Survived：目标值 (target)\n",
    "3. Pclass：反映了当时各乘客的社会地位\n",
    "4. Name：姓名的前缀中可能存在着潜在的年龄、社会地位或家庭关系\n",
    "5. Sex：使用 1 代表 male，使用 0 代表 female。\n",
    "6. Age：可以代表个体的生存能力\n",
    "7. SibSp | Parch：家庭团体，对生存具有一定影响。\n",
    "8. Ticket | Fare | Cabin：这三者也有一定地联系，票号反映了不同的团体，票价反映了社会地位。但有些人购买了多个舱室，其Fare也很高。\n",
    "9. Embarked：能够了解每个乘客大概来自哪些地方"
   ],
   "id": "3e72de17f1e28fd3"
  },
  {
   "metadata": {},
   "cell_type": "markdown",
   "source": [
    "## 二、数据预处理\n",
    "\n",
    "需要处理缺失值，去除无用值，可能需要转变文本值为数值和使用组合特征值。"
   ],
   "id": "870fedbaf26c1a70"
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-03-25T04:02:06.673874Z",
     "start_time": "2025-03-25T04:02:05.794785Z"
    }
   },
   "cell_type": "code",
   "source": [
    "import numpy as np\n",
    "import pandas as pd\n",
    "import matplotlib.pyplot as plt"
   ],
   "id": "bf8a55b525b37d98",
   "outputs": [],
   "execution_count": 1
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-03-25T04:02:08.714660Z",
     "start_time": "2025-03-25T04:02:08.694986Z"
    }
   },
   "cell_type": "code",
   "source": [
    "# 读取数据\n",
    "df1 = pd.read_csv('./../data/train.csv')"
   ],
   "id": "f724ee78d4daa5bc",
   "outputs": [],
   "execution_count": 2
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-03-25T04:02:15.572510Z",
     "start_time": "2025-03-25T04:02:15.555023Z"
    }
   },
   "cell_type": "code",
   "source": "df2 = pd.read_csv('./../data/test.csv')",
   "id": "20e93a908c7baf30",
   "outputs": [],
   "execution_count": 3
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-03-25T04:02:16.297807Z",
     "start_time": "2025-03-25T04:02:16.285753Z"
    }
   },
   "cell_type": "code",
   "source": "df1",
   "id": "baafa7e41d0d71d7",
   "outputs": [
    {
     "data": {
      "text/plain": [
       "     PassengerId  Survived  Pclass  \\\n",
       "0              1         0       3   \n",
       "1              2         1       1   \n",
       "2              3         1       3   \n",
       "3              4         1       1   \n",
       "4              5         0       3   \n",
       "..           ...       ...     ...   \n",
       "886          887         0       2   \n",
       "887          888         1       1   \n",
       "888          889         0       3   \n",
       "889          890         1       1   \n",
       "890          891         0       3   \n",
       "\n",
       "                                                  Name     Sex   Age  SibSp  \\\n",
       "0                              Braund, Mr. Owen Harris    male  22.0      1   \n",
       "1    Cumings, Mrs. John Bradley (Florence Briggs Th...  female  38.0      1   \n",
       "2                               Heikkinen, Miss. Laina  female  26.0      0   \n",
       "3         Futrelle, Mrs. Jacques Heath (Lily May Peel)  female  35.0      1   \n",
       "4                             Allen, Mr. William Henry    male  35.0      0   \n",
       "..                                                 ...     ...   ...    ...   \n",
       "886                              Montvila, Rev. Juozas    male  27.0      0   \n",
       "887                       Graham, Miss. Margaret Edith  female  19.0      0   \n",
       "888           Johnston, Miss. Catherine Helen \"Carrie\"  female   NaN      1   \n",
       "889                              Behr, Mr. Karl Howell    male  26.0      0   \n",
       "890                                Dooley, Mr. Patrick    male  32.0      0   \n",
       "\n",
       "     Parch            Ticket     Fare Cabin Embarked  \n",
       "0        0         A/5 21171   7.2500   NaN        S  \n",
       "1        0          PC 17599  71.2833   C85        C  \n",
       "2        0  STON/O2. 3101282   7.9250   NaN        S  \n",
       "3        0            113803  53.1000  C123        S  \n",
       "4        0            373450   8.0500   NaN        S  \n",
       "..     ...               ...      ...   ...      ...  \n",
       "886      0            211536  13.0000   NaN        S  \n",
       "887      0            112053  30.0000   B42        S  \n",
       "888      2        W./C. 6607  23.4500   NaN        S  \n",
       "889      0            111369  30.0000  C148        C  \n",
       "890      0            370376   7.7500   NaN        Q  \n",
       "\n",
       "[891 rows x 12 columns]"
      ],
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>PassengerId</th>\n",
       "      <th>Survived</th>\n",
       "      <th>Pclass</th>\n",
       "      <th>Name</th>\n",
       "      <th>Sex</th>\n",
       "      <th>Age</th>\n",
       "      <th>SibSp</th>\n",
       "      <th>Parch</th>\n",
       "      <th>Ticket</th>\n",
       "      <th>Fare</th>\n",
       "      <th>Cabin</th>\n",
       "      <th>Embarked</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>3</td>\n",
       "      <td>Braund, Mr. Owen Harris</td>\n",
       "      <td>male</td>\n",
       "      <td>22.0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>A/5 21171</td>\n",
       "      <td>7.2500</td>\n",
       "      <td>NaN</td>\n",
       "      <td>S</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>2</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>Cumings, Mrs. John Bradley (Florence Briggs Th...</td>\n",
       "      <td>female</td>\n",
       "      <td>38.0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>PC 17599</td>\n",
       "      <td>71.2833</td>\n",
       "      <td>C85</td>\n",
       "      <td>C</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>3</td>\n",
       "      <td>1</td>\n",
       "      <td>3</td>\n",
       "      <td>Heikkinen, Miss. Laina</td>\n",
       "      <td>female</td>\n",
       "      <td>26.0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>STON/O2. 3101282</td>\n",
       "      <td>7.9250</td>\n",
       "      <td>NaN</td>\n",
       "      <td>S</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>4</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>Futrelle, Mrs. Jacques Heath (Lily May Peel)</td>\n",
       "      <td>female</td>\n",
       "      <td>35.0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>113803</td>\n",
       "      <td>53.1000</td>\n",
       "      <td>C123</td>\n",
       "      <td>S</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>5</td>\n",
       "      <td>0</td>\n",
       "      <td>3</td>\n",
       "      <td>Allen, Mr. William Henry</td>\n",
       "      <td>male</td>\n",
       "      <td>35.0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>373450</td>\n",
       "      <td>8.0500</td>\n",
       "      <td>NaN</td>\n",
       "      <td>S</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>...</th>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>886</th>\n",
       "      <td>887</td>\n",
       "      <td>0</td>\n",
       "      <td>2</td>\n",
       "      <td>Montvila, Rev. Juozas</td>\n",
       "      <td>male</td>\n",
       "      <td>27.0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>211536</td>\n",
       "      <td>13.0000</td>\n",
       "      <td>NaN</td>\n",
       "      <td>S</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>887</th>\n",
       "      <td>888</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>Graham, Miss. Margaret Edith</td>\n",
       "      <td>female</td>\n",
       "      <td>19.0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>112053</td>\n",
       "      <td>30.0000</td>\n",
       "      <td>B42</td>\n",
       "      <td>S</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>888</th>\n",
       "      <td>889</td>\n",
       "      <td>0</td>\n",
       "      <td>3</td>\n",
       "      <td>Johnston, Miss. Catherine Helen \"Carrie\"</td>\n",
       "      <td>female</td>\n",
       "      <td>NaN</td>\n",
       "      <td>1</td>\n",
       "      <td>2</td>\n",
       "      <td>W./C. 6607</td>\n",
       "      <td>23.4500</td>\n",
       "      <td>NaN</td>\n",
       "      <td>S</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>889</th>\n",
       "      <td>890</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>Behr, Mr. Karl Howell</td>\n",
       "      <td>male</td>\n",
       "      <td>26.0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>111369</td>\n",
       "      <td>30.0000</td>\n",
       "      <td>C148</td>\n",
       "      <td>C</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>890</th>\n",
       "      <td>891</td>\n",
       "      <td>0</td>\n",
       "      <td>3</td>\n",
       "      <td>Dooley, Mr. Patrick</td>\n",
       "      <td>male</td>\n",
       "      <td>32.0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>370376</td>\n",
       "      <td>7.7500</td>\n",
       "      <td>NaN</td>\n",
       "      <td>Q</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>891 rows × 12 columns</p>\n",
       "</div>"
      ]
     },
     "execution_count": 4,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "execution_count": 4
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-03-25T04:02:17.137794Z",
     "start_time": "2025-03-25T04:02:17.129343Z"
    }
   },
   "cell_type": "code",
   "source": "df2",
   "id": "797f60b9d4890f35",
   "outputs": [
    {
     "data": {
      "text/plain": [
       "     PassengerId  Pclass                                          Name  \\\n",
       "0            892       3                              Kelly, Mr. James   \n",
       "1            893       3              Wilkes, Mrs. James (Ellen Needs)   \n",
       "2            894       2                     Myles, Mr. Thomas Francis   \n",
       "3            895       3                              Wirz, Mr. Albert   \n",
       "4            896       3  Hirvonen, Mrs. Alexander (Helga E Lindqvist)   \n",
       "..           ...     ...                                           ...   \n",
       "413         1305       3                            Spector, Mr. Woolf   \n",
       "414         1306       1                  Oliva y Ocana, Dona. Fermina   \n",
       "415         1307       3                  Saether, Mr. Simon Sivertsen   \n",
       "416         1308       3                           Ware, Mr. Frederick   \n",
       "417         1309       3                      Peter, Master. Michael J   \n",
       "\n",
       "        Sex   Age  SibSp  Parch              Ticket      Fare Cabin Embarked  \n",
       "0      male  34.5      0      0              330911    7.8292   NaN        Q  \n",
       "1    female  47.0      1      0              363272    7.0000   NaN        S  \n",
       "2      male  62.0      0      0              240276    9.6875   NaN        Q  \n",
       "3      male  27.0      0      0              315154    8.6625   NaN        S  \n",
       "4    female  22.0      1      1             3101298   12.2875   NaN        S  \n",
       "..      ...   ...    ...    ...                 ...       ...   ...      ...  \n",
       "413    male   NaN      0      0           A.5. 3236    8.0500   NaN        S  \n",
       "414  female  39.0      0      0            PC 17758  108.9000  C105        C  \n",
       "415    male  38.5      0      0  SOTON/O.Q. 3101262    7.2500   NaN        S  \n",
       "416    male   NaN      0      0              359309    8.0500   NaN        S  \n",
       "417    male   NaN      1      1                2668   22.3583   NaN        C  \n",
       "\n",
       "[418 rows x 11 columns]"
      ],
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>PassengerId</th>\n",
       "      <th>Pclass</th>\n",
       "      <th>Name</th>\n",
       "      <th>Sex</th>\n",
       "      <th>Age</th>\n",
       "      <th>SibSp</th>\n",
       "      <th>Parch</th>\n",
       "      <th>Ticket</th>\n",
       "      <th>Fare</th>\n",
       "      <th>Cabin</th>\n",
       "      <th>Embarked</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>892</td>\n",
       "      <td>3</td>\n",
       "      <td>Kelly, Mr. James</td>\n",
       "      <td>male</td>\n",
       "      <td>34.5</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>330911</td>\n",
       "      <td>7.8292</td>\n",
       "      <td>NaN</td>\n",
       "      <td>Q</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>893</td>\n",
       "      <td>3</td>\n",
       "      <td>Wilkes, Mrs. James (Ellen Needs)</td>\n",
       "      <td>female</td>\n",
       "      <td>47.0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>363272</td>\n",
       "      <td>7.0000</td>\n",
       "      <td>NaN</td>\n",
       "      <td>S</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>894</td>\n",
       "      <td>2</td>\n",
       "      <td>Myles, Mr. Thomas Francis</td>\n",
       "      <td>male</td>\n",
       "      <td>62.0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>240276</td>\n",
       "      <td>9.6875</td>\n",
       "      <td>NaN</td>\n",
       "      <td>Q</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>895</td>\n",
       "      <td>3</td>\n",
       "      <td>Wirz, Mr. Albert</td>\n",
       "      <td>male</td>\n",
       "      <td>27.0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>315154</td>\n",
       "      <td>8.6625</td>\n",
       "      <td>NaN</td>\n",
       "      <td>S</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>896</td>\n",
       "      <td>3</td>\n",
       "      <td>Hirvonen, Mrs. Alexander (Helga E Lindqvist)</td>\n",
       "      <td>female</td>\n",
       "      <td>22.0</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>3101298</td>\n",
       "      <td>12.2875</td>\n",
       "      <td>NaN</td>\n",
       "      <td>S</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>...</th>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>413</th>\n",
       "      <td>1305</td>\n",
       "      <td>3</td>\n",
       "      <td>Spector, Mr. Woolf</td>\n",
       "      <td>male</td>\n",
       "      <td>NaN</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>A.5. 3236</td>\n",
       "      <td>8.0500</td>\n",
       "      <td>NaN</td>\n",
       "      <td>S</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>414</th>\n",
       "      <td>1306</td>\n",
       "      <td>1</td>\n",
       "      <td>Oliva y Ocana, Dona. Fermina</td>\n",
       "      <td>female</td>\n",
       "      <td>39.0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>PC 17758</td>\n",
       "      <td>108.9000</td>\n",
       "      <td>C105</td>\n",
       "      <td>C</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>415</th>\n",
       "      <td>1307</td>\n",
       "      <td>3</td>\n",
       "      <td>Saether, Mr. Simon Sivertsen</td>\n",
       "      <td>male</td>\n",
       "      <td>38.5</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>SOTON/O.Q. 3101262</td>\n",
       "      <td>7.2500</td>\n",
       "      <td>NaN</td>\n",
       "      <td>S</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>416</th>\n",
       "      <td>1308</td>\n",
       "      <td>3</td>\n",
       "      <td>Ware, Mr. Frederick</td>\n",
       "      <td>male</td>\n",
       "      <td>NaN</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>359309</td>\n",
       "      <td>8.0500</td>\n",
       "      <td>NaN</td>\n",
       "      <td>S</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>417</th>\n",
       "      <td>1309</td>\n",
       "      <td>3</td>\n",
       "      <td>Peter, Master. Michael J</td>\n",
       "      <td>male</td>\n",
       "      <td>NaN</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>2668</td>\n",
       "      <td>22.3583</td>\n",
       "      <td>NaN</td>\n",
       "      <td>C</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>418 rows × 11 columns</p>\n",
       "</div>"
      ]
     },
     "execution_count": 5,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "execution_count": 5
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-03-25T04:02:17.912144Z",
     "start_time": "2025-03-25T04:02:17.907603Z"
    }
   },
   "cell_type": "code",
   "source": [
    "n1 = df1.shape[0]\n",
    "n1"
   ],
   "id": "1b063e92e186f673",
   "outputs": [
    {
     "data": {
      "text/plain": [
       "891"
      ]
     },
     "execution_count": 6,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "execution_count": 6
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-03-25T04:02:18.580662Z",
     "start_time": "2025-03-25T04:02:18.575023Z"
    }
   },
   "cell_type": "code",
   "source": [
    "n2 = df2.shape[0]\n",
    "n2"
   ],
   "id": "d3bf8cf7f6b65556",
   "outputs": [
    {
     "data": {
      "text/plain": [
       "418"
      ]
     },
     "execution_count": 7,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "execution_count": 7
  },
  {
   "metadata": {},
   "cell_type": "markdown",
   "source": "### df1 处理缺失值",
   "id": "1444088e6fef726"
  },
  {
   "metadata": {},
   "cell_type": "markdown",
   "source": "**确认缺失特征：**",
   "id": "5284987c92995781"
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-03-25T04:02:20.438236Z",
     "start_time": "2025-03-25T04:02:20.432545Z"
    }
   },
   "cell_type": "code",
   "source": [
    "lack = [k for k in df1.columns if df1[k].isna().any()]\n",
    "lack"
   ],
   "id": "346ace379638533",
   "outputs": [
    {
     "data": {
      "text/plain": [
       "['Age', 'Cabin', 'Embarked']"
      ]
     },
     "execution_count": 8,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "execution_count": 8
  },
  {
   "metadata": {},
   "cell_type": "markdown",
   "source": [
    "#### 处理 'Age' 缺失：\n",
    "\n",
    "使用平均数、中位数或众数？"
   ],
   "id": "ff823fa3e46c84a0"
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-03-25T04:02:21.678591Z",
     "start_time": "2025-03-25T04:02:21.673239Z"
    }
   },
   "cell_type": "code",
   "source": "df1['Age'].isna().astype(int).sum()",
   "id": "426128863a72b6f4",
   "outputs": [
    {
     "data": {
      "text/plain": [
       "np.int64(177)"
      ]
     },
     "execution_count": 9,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "execution_count": 9
  },
  {
   "metadata": {},
   "cell_type": "markdown",
   "source": [
    "***共缺失 177 条年龄数据，而整体有 891 条数据，缺少近 20% ，对于预测来说这是不容小觑的。***\n",
    "\n",
    "因此单纯使用中位数等可能会导致最终预测效果不好，需要更加精准地填补缺失方式。"
   ],
   "id": "cb8854fe7b4fc291"
  },
  {
   "metadata": {},
   "cell_type": "markdown",
   "source": "***使用与年龄有关联的姓名称谓进行分组平均数填充***",
   "id": "23287ac9698b9476"
  },
  {
   "metadata": {},
   "cell_type": "markdown",
   "source": "**单独取出 'Name' 和 'Age' 进行处理**",
   "id": "4b06909d5f8a401e"
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-03-25T04:02:22.648495Z",
     "start_time": "2025-03-25T04:02:22.638621Z"
    }
   },
   "cell_type": "code",
   "source": [
    "df_name_age = df1[['Name', 'Age']].copy()\n",
    "df_name_age"
   ],
   "id": "1eb169d2760f5019",
   "outputs": [
    {
     "data": {
      "text/plain": [
       "                                                  Name   Age\n",
       "0                              Braund, Mr. Owen Harris  22.0\n",
       "1    Cumings, Mrs. John Bradley (Florence Briggs Th...  38.0\n",
       "2                               Heikkinen, Miss. Laina  26.0\n",
       "3         Futrelle, Mrs. Jacques Heath (Lily May Peel)  35.0\n",
       "4                             Allen, Mr. William Henry  35.0\n",
       "..                                                 ...   ...\n",
       "886                              Montvila, Rev. Juozas  27.0\n",
       "887                       Graham, Miss. Margaret Edith  19.0\n",
       "888           Johnston, Miss. Catherine Helen \"Carrie\"   NaN\n",
       "889                              Behr, Mr. Karl Howell  26.0\n",
       "890                                Dooley, Mr. Patrick  32.0\n",
       "\n",
       "[891 rows x 2 columns]"
      ],
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Name</th>\n",
       "      <th>Age</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>Braund, Mr. Owen Harris</td>\n",
       "      <td>22.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>Cumings, Mrs. John Bradley (Florence Briggs Th...</td>\n",
       "      <td>38.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>Heikkinen, Miss. Laina</td>\n",
       "      <td>26.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>Futrelle, Mrs. Jacques Heath (Lily May Peel)</td>\n",
       "      <td>35.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>Allen, Mr. William Henry</td>\n",
       "      <td>35.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>...</th>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>886</th>\n",
       "      <td>Montvila, Rev. Juozas</td>\n",
       "      <td>27.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>887</th>\n",
       "      <td>Graham, Miss. Margaret Edith</td>\n",
       "      <td>19.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>888</th>\n",
       "      <td>Johnston, Miss. Catherine Helen \"Carrie\"</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>889</th>\n",
       "      <td>Behr, Mr. Karl Howell</td>\n",
       "      <td>26.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>890</th>\n",
       "      <td>Dooley, Mr. Patrick</td>\n",
       "      <td>32.0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>891 rows × 2 columns</p>\n",
       "</div>"
      ]
     },
     "execution_count": 10,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "execution_count": 10
  },
  {
   "metadata": {},
   "cell_type": "markdown",
   "source": "**直接取出每个人的称谓为一列**",
   "id": "12afbdb79383eabf"
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-03-25T04:02:23.192876Z",
     "start_time": "2025-03-25T04:02:23.186288Z"
    }
   },
   "cell_type": "code",
   "source": [
    "df_name_age['Name'] = df_name_age['Name'].map(lambda x: x.split(',')[1].split('.')[0].strip())\n",
    "df_name_age"
   ],
   "id": "db0f8fce09c3fa0d",
   "outputs": [
    {
     "data": {
      "text/plain": [
       "     Name   Age\n",
       "0      Mr  22.0\n",
       "1     Mrs  38.0\n",
       "2    Miss  26.0\n",
       "3     Mrs  35.0\n",
       "4      Mr  35.0\n",
       "..    ...   ...\n",
       "886   Rev  27.0\n",
       "887  Miss  19.0\n",
       "888  Miss   NaN\n",
       "889    Mr  26.0\n",
       "890    Mr  32.0\n",
       "\n",
       "[891 rows x 2 columns]"
      ],
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Name</th>\n",
       "      <th>Age</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>Mr</td>\n",
       "      <td>22.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>Mrs</td>\n",
       "      <td>38.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>Miss</td>\n",
       "      <td>26.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>Mrs</td>\n",
       "      <td>35.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>Mr</td>\n",
       "      <td>35.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>...</th>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>886</th>\n",
       "      <td>Rev</td>\n",
       "      <td>27.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>887</th>\n",
       "      <td>Miss</td>\n",
       "      <td>19.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>888</th>\n",
       "      <td>Miss</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>889</th>\n",
       "      <td>Mr</td>\n",
       "      <td>26.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>890</th>\n",
       "      <td>Mr</td>\n",
       "      <td>32.0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>891 rows × 2 columns</p>\n",
       "</div>"
      ]
     },
     "execution_count": 11,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "execution_count": 11
  },
  {
   "metadata": {},
   "cell_type": "markdown",
   "source": "**对每种称谓进行分组聚合取平均**",
   "id": "f8f9b851100006ca"
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-03-25T04:02:24.133113Z",
     "start_time": "2025-03-25T04:02:24.126165Z"
    }
   },
   "cell_type": "code",
   "source": [
    "age_nan_values = df_name_age.groupby('Name').mean().round()\n",
    "age_nan_values"
   ],
   "id": "583e08c6c47783f1",
   "outputs": [
    {
     "data": {
      "text/plain": [
       "               Age\n",
       "Name              \n",
       "Capt          70.0\n",
       "Col           58.0\n",
       "Don           40.0\n",
       "Dr            42.0\n",
       "Jonkheer      38.0\n",
       "Lady          48.0\n",
       "Major         48.0\n",
       "Master         5.0\n",
       "Miss          22.0\n",
       "Mlle          24.0\n",
       "Mme           24.0\n",
       "Mr            32.0\n",
       "Mrs           36.0\n",
       "Ms            28.0\n",
       "Rev           43.0\n",
       "Sir           49.0\n",
       "the Countess  33.0"
      ],
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Age</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Name</th>\n",
       "      <th></th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>Capt</th>\n",
       "      <td>70.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Col</th>\n",
       "      <td>58.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Don</th>\n",
       "      <td>40.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Dr</th>\n",
       "      <td>42.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Jonkheer</th>\n",
       "      <td>38.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Lady</th>\n",
       "      <td>48.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Major</th>\n",
       "      <td>48.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Master</th>\n",
       "      <td>5.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Miss</th>\n",
       "      <td>22.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Mlle</th>\n",
       "      <td>24.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Mme</th>\n",
       "      <td>24.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Mr</th>\n",
       "      <td>32.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Mrs</th>\n",
       "      <td>36.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Ms</th>\n",
       "      <td>28.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Rev</th>\n",
       "      <td>43.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Sir</th>\n",
       "      <td>49.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>the Countess</th>\n",
       "      <td>33.0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ]
     },
     "execution_count": 12,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "execution_count": 12
  },
  {
   "metadata": {},
   "cell_type": "markdown",
   "source": [
    "***各个称谓所代表的含义***\n",
    "\n",
    "|         称谓         |            含义             |\n",
    "|:------------------:|:-------------------------:|\n",
    "|   Capt（Captain）    |      船长、上尉（海军或陆军军衔）       |\n",
    "|    Col（Colonel）    |         上校（高级军官）          |\n",
    "|        Don         |    西班牙语中对男性的尊称（类似“先生”）    |\n",
    "|     Dr（Doctor）     |           博士或医生           |\n",
    "|      Jonkheer      |   荷兰低阶贵族头衔，意为“阁下”或“少爷”    |\n",
    "|        Lady        | 英国女性贵族头衔（如伯爵夫人），或对女性的礼貌称呼 |\n",
    "|       Major        |         少校（中级军官）          |\n",
    "|       Master       |        旧时对未成年男孩的称呼        |\n",
    "|        Miss        |           未婚女性            |\n",
    "| Mlle（Mademoiselle） |      法语中的“小姐”（未婚女性）       |\n",
    "|    Mme（Madame）     |     法语中的“夫人”（已婚或年长女性）     |\n",
    "|     Mr（Mister）     |         成年男性的通用称呼         |\n",
    "|    Mrs（Missus）     |        已婚女性，传统上随夫姓        |\n",
    "|         Ms         |    女性通用称呼，婚姻状况不明或不愿透露     |\n",
    "|   Rev（Reverend）    |          牧师或神职人员          |\n",
    "|        Sir         |         对骑士或男爵的尊称         |\n",
    "|    the Countess    |         女伯爵或伯爵夫人          |"
   ],
   "id": "51bf3e4448f97140"
  },
  {
   "metadata": {},
   "cell_type": "markdown",
   "source": "**填充缺失值并赋值给 df1**",
   "id": "3420fe5d12b33d19"
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-03-25T04:02:25.592811Z",
     "start_time": "2025-03-25T04:02:25.579062Z"
    }
   },
   "cell_type": "code",
   "source": [
    "# apply() 用于对 Series 或 DataFrame 的数据进行逐元素、逐行或逐列的批量处理\n",
    "# df1['Age'] = df_name_age.apply(\n",
    "#     lambda x: age_nan_values.loc[x['Name']].values[0] if pd.isna(x['Age']) else x['Age'], \n",
    "#     axis=1\n",
    "# )\n",
    "# TODO itertuples() 速度更快，是 apply() 的三倍\n",
    "# loc[] 直接索引值，pd.isna() 判断pandas数据是否为空\n",
    "age = []\n",
    "for row in df_name_age.itertuples(index=False):\n",
    "    if pd.isna(row[1]):\n",
    "        age.append(age_nan_values.loc[row[0]].values[0])\n",
    "    else:\n",
    "        age.append(row[1])\n",
    "df1['Age'] = pd.Series(age)\n",
    "df1"
   ],
   "id": "8f0e86659451a4e2",
   "outputs": [
    {
     "data": {
      "text/plain": [
       "     PassengerId  Survived  Pclass  \\\n",
       "0              1         0       3   \n",
       "1              2         1       1   \n",
       "2              3         1       3   \n",
       "3              4         1       1   \n",
       "4              5         0       3   \n",
       "..           ...       ...     ...   \n",
       "886          887         0       2   \n",
       "887          888         1       1   \n",
       "888          889         0       3   \n",
       "889          890         1       1   \n",
       "890          891         0       3   \n",
       "\n",
       "                                                  Name     Sex   Age  SibSp  \\\n",
       "0                              Braund, Mr. Owen Harris    male  22.0      1   \n",
       "1    Cumings, Mrs. John Bradley (Florence Briggs Th...  female  38.0      1   \n",
       "2                               Heikkinen, Miss. Laina  female  26.0      0   \n",
       "3         Futrelle, Mrs. Jacques Heath (Lily May Peel)  female  35.0      1   \n",
       "4                             Allen, Mr. William Henry    male  35.0      0   \n",
       "..                                                 ...     ...   ...    ...   \n",
       "886                              Montvila, Rev. Juozas    male  27.0      0   \n",
       "887                       Graham, Miss. Margaret Edith  female  19.0      0   \n",
       "888           Johnston, Miss. Catherine Helen \"Carrie\"  female  22.0      1   \n",
       "889                              Behr, Mr. Karl Howell    male  26.0      0   \n",
       "890                                Dooley, Mr. Patrick    male  32.0      0   \n",
       "\n",
       "     Parch            Ticket     Fare Cabin Embarked  \n",
       "0        0         A/5 21171   7.2500   NaN        S  \n",
       "1        0          PC 17599  71.2833   C85        C  \n",
       "2        0  STON/O2. 3101282   7.9250   NaN        S  \n",
       "3        0            113803  53.1000  C123        S  \n",
       "4        0            373450   8.0500   NaN        S  \n",
       "..     ...               ...      ...   ...      ...  \n",
       "886      0            211536  13.0000   NaN        S  \n",
       "887      0            112053  30.0000   B42        S  \n",
       "888      2        W./C. 6607  23.4500   NaN        S  \n",
       "889      0            111369  30.0000  C148        C  \n",
       "890      0            370376   7.7500   NaN        Q  \n",
       "\n",
       "[891 rows x 12 columns]"
      ],
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>PassengerId</th>\n",
       "      <th>Survived</th>\n",
       "      <th>Pclass</th>\n",
       "      <th>Name</th>\n",
       "      <th>Sex</th>\n",
       "      <th>Age</th>\n",
       "      <th>SibSp</th>\n",
       "      <th>Parch</th>\n",
       "      <th>Ticket</th>\n",
       "      <th>Fare</th>\n",
       "      <th>Cabin</th>\n",
       "      <th>Embarked</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>3</td>\n",
       "      <td>Braund, Mr. Owen Harris</td>\n",
       "      <td>male</td>\n",
       "      <td>22.0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>A/5 21171</td>\n",
       "      <td>7.2500</td>\n",
       "      <td>NaN</td>\n",
       "      <td>S</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>2</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>Cumings, Mrs. John Bradley (Florence Briggs Th...</td>\n",
       "      <td>female</td>\n",
       "      <td>38.0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>PC 17599</td>\n",
       "      <td>71.2833</td>\n",
       "      <td>C85</td>\n",
       "      <td>C</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>3</td>\n",
       "      <td>1</td>\n",
       "      <td>3</td>\n",
       "      <td>Heikkinen, Miss. Laina</td>\n",
       "      <td>female</td>\n",
       "      <td>26.0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>STON/O2. 3101282</td>\n",
       "      <td>7.9250</td>\n",
       "      <td>NaN</td>\n",
       "      <td>S</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>4</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>Futrelle, Mrs. Jacques Heath (Lily May Peel)</td>\n",
       "      <td>female</td>\n",
       "      <td>35.0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>113803</td>\n",
       "      <td>53.1000</td>\n",
       "      <td>C123</td>\n",
       "      <td>S</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>5</td>\n",
       "      <td>0</td>\n",
       "      <td>3</td>\n",
       "      <td>Allen, Mr. William Henry</td>\n",
       "      <td>male</td>\n",
       "      <td>35.0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>373450</td>\n",
       "      <td>8.0500</td>\n",
       "      <td>NaN</td>\n",
       "      <td>S</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>...</th>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>886</th>\n",
       "      <td>887</td>\n",
       "      <td>0</td>\n",
       "      <td>2</td>\n",
       "      <td>Montvila, Rev. Juozas</td>\n",
       "      <td>male</td>\n",
       "      <td>27.0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>211536</td>\n",
       "      <td>13.0000</td>\n",
       "      <td>NaN</td>\n",
       "      <td>S</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>887</th>\n",
       "      <td>888</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>Graham, Miss. Margaret Edith</td>\n",
       "      <td>female</td>\n",
       "      <td>19.0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>112053</td>\n",
       "      <td>30.0000</td>\n",
       "      <td>B42</td>\n",
       "      <td>S</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>888</th>\n",
       "      <td>889</td>\n",
       "      <td>0</td>\n",
       "      <td>3</td>\n",
       "      <td>Johnston, Miss. Catherine Helen \"Carrie\"</td>\n",
       "      <td>female</td>\n",
       "      <td>22.0</td>\n",
       "      <td>1</td>\n",
       "      <td>2</td>\n",
       "      <td>W./C. 6607</td>\n",
       "      <td>23.4500</td>\n",
       "      <td>NaN</td>\n",
       "      <td>S</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>889</th>\n",
       "      <td>890</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>Behr, Mr. Karl Howell</td>\n",
       "      <td>male</td>\n",
       "      <td>26.0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>111369</td>\n",
       "      <td>30.0000</td>\n",
       "      <td>C148</td>\n",
       "      <td>C</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>890</th>\n",
       "      <td>891</td>\n",
       "      <td>0</td>\n",
       "      <td>3</td>\n",
       "      <td>Dooley, Mr. Patrick</td>\n",
       "      <td>male</td>\n",
       "      <td>32.0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>370376</td>\n",
       "      <td>7.7500</td>\n",
       "      <td>NaN</td>\n",
       "      <td>Q</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>891 rows × 12 columns</p>\n",
       "</div>"
      ]
     },
     "execution_count": 13,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "execution_count": 13
  },
  {
   "metadata": {},
   "cell_type": "markdown",
   "source": [
    "#### 处理 'Cabin' 缺失：\n",
    "\n",
    "如何填补？是否需要这个特征值？"
   ],
   "id": "1a5e694fb833063b"
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-03-25T04:02:27.322746Z",
     "start_time": "2025-03-25T04:02:27.315960Z"
    }
   },
   "cell_type": "code",
   "source": "df1['Cabin'].isna().astype(int).sum()",
   "id": "357c7136fb8d3620",
   "outputs": [
    {
     "data": {
      "text/plain": [
       "np.int64(687)"
      ]
     },
     "execution_count": 14,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "execution_count": 14
  },
  {
   "metadata": {},
   "cell_type": "markdown",
   "source": [
    "***共缺失 687 条年龄数据，而整体有 891 条数据，缺少 77% ，对于预测来说这是场灾难！***\n",
    "\n",
    "我们无法通过 票号(Ticket) 和 票价(Fare) 等信息找出潜在规律，从而得出 舱室(Cabin) 信息，虽然其特征可能反映出当时的层数，这对预测有一定地帮助，但其信息缺失过多也无从考究。\n",
    "\n",
    "我能够得出的是：舱室的购买是按照家庭记录的，同一个家庭其 Ticket | Fare | Cabin 信息一致。"
   ],
   "id": "b72ba4208b7cbd52"
  },
  {
   "metadata": {},
   "cell_type": "markdown",
   "source": "***因此暂时放弃填补对 'Cabin' 缺失填补，先将此特征去除。***",
   "id": "9e5e0348281c33ec"
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-03-25T04:02:28.637564Z",
     "start_time": "2025-03-25T04:02:28.628657Z"
    }
   },
   "cell_type": "code",
   "source": [
    "df1 = df1.drop(['Cabin'], axis=1)\n",
    "df1"
   ],
   "id": "b5f8c77da1ffdaed",
   "outputs": [
    {
     "data": {
      "text/plain": [
       "     PassengerId  Survived  Pclass  \\\n",
       "0              1         0       3   \n",
       "1              2         1       1   \n",
       "2              3         1       3   \n",
       "3              4         1       1   \n",
       "4              5         0       3   \n",
       "..           ...       ...     ...   \n",
       "886          887         0       2   \n",
       "887          888         1       1   \n",
       "888          889         0       3   \n",
       "889          890         1       1   \n",
       "890          891         0       3   \n",
       "\n",
       "                                                  Name     Sex   Age  SibSp  \\\n",
       "0                              Braund, Mr. Owen Harris    male  22.0      1   \n",
       "1    Cumings, Mrs. John Bradley (Florence Briggs Th...  female  38.0      1   \n",
       "2                               Heikkinen, Miss. Laina  female  26.0      0   \n",
       "3         Futrelle, Mrs. Jacques Heath (Lily May Peel)  female  35.0      1   \n",
       "4                             Allen, Mr. William Henry    male  35.0      0   \n",
       "..                                                 ...     ...   ...    ...   \n",
       "886                              Montvila, Rev. Juozas    male  27.0      0   \n",
       "887                       Graham, Miss. Margaret Edith  female  19.0      0   \n",
       "888           Johnston, Miss. Catherine Helen \"Carrie\"  female  22.0      1   \n",
       "889                              Behr, Mr. Karl Howell    male  26.0      0   \n",
       "890                                Dooley, Mr. Patrick    male  32.0      0   \n",
       "\n",
       "     Parch            Ticket     Fare Embarked  \n",
       "0        0         A/5 21171   7.2500        S  \n",
       "1        0          PC 17599  71.2833        C  \n",
       "2        0  STON/O2. 3101282   7.9250        S  \n",
       "3        0            113803  53.1000        S  \n",
       "4        0            373450   8.0500        S  \n",
       "..     ...               ...      ...      ...  \n",
       "886      0            211536  13.0000        S  \n",
       "887      0            112053  30.0000        S  \n",
       "888      2        W./C. 6607  23.4500        S  \n",
       "889      0            111369  30.0000        C  \n",
       "890      0            370376   7.7500        Q  \n",
       "\n",
       "[891 rows x 11 columns]"
      ],
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>PassengerId</th>\n",
       "      <th>Survived</th>\n",
       "      <th>Pclass</th>\n",
       "      <th>Name</th>\n",
       "      <th>Sex</th>\n",
       "      <th>Age</th>\n",
       "      <th>SibSp</th>\n",
       "      <th>Parch</th>\n",
       "      <th>Ticket</th>\n",
       "      <th>Fare</th>\n",
       "      <th>Embarked</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>3</td>\n",
       "      <td>Braund, Mr. Owen Harris</td>\n",
       "      <td>male</td>\n",
       "      <td>22.0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>A/5 21171</td>\n",
       "      <td>7.2500</td>\n",
       "      <td>S</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>2</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>Cumings, Mrs. John Bradley (Florence Briggs Th...</td>\n",
       "      <td>female</td>\n",
       "      <td>38.0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>PC 17599</td>\n",
       "      <td>71.2833</td>\n",
       "      <td>C</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>3</td>\n",
       "      <td>1</td>\n",
       "      <td>3</td>\n",
       "      <td>Heikkinen, Miss. Laina</td>\n",
       "      <td>female</td>\n",
       "      <td>26.0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>STON/O2. 3101282</td>\n",
       "      <td>7.9250</td>\n",
       "      <td>S</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>4</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>Futrelle, Mrs. Jacques Heath (Lily May Peel)</td>\n",
       "      <td>female</td>\n",
       "      <td>35.0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>113803</td>\n",
       "      <td>53.1000</td>\n",
       "      <td>S</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>5</td>\n",
       "      <td>0</td>\n",
       "      <td>3</td>\n",
       "      <td>Allen, Mr. William Henry</td>\n",
       "      <td>male</td>\n",
       "      <td>35.0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>373450</td>\n",
       "      <td>8.0500</td>\n",
       "      <td>S</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>...</th>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>886</th>\n",
       "      <td>887</td>\n",
       "      <td>0</td>\n",
       "      <td>2</td>\n",
       "      <td>Montvila, Rev. Juozas</td>\n",
       "      <td>male</td>\n",
       "      <td>27.0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>211536</td>\n",
       "      <td>13.0000</td>\n",
       "      <td>S</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>887</th>\n",
       "      <td>888</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>Graham, Miss. Margaret Edith</td>\n",
       "      <td>female</td>\n",
       "      <td>19.0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>112053</td>\n",
       "      <td>30.0000</td>\n",
       "      <td>S</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>888</th>\n",
       "      <td>889</td>\n",
       "      <td>0</td>\n",
       "      <td>3</td>\n",
       "      <td>Johnston, Miss. Catherine Helen \"Carrie\"</td>\n",
       "      <td>female</td>\n",
       "      <td>22.0</td>\n",
       "      <td>1</td>\n",
       "      <td>2</td>\n",
       "      <td>W./C. 6607</td>\n",
       "      <td>23.4500</td>\n",
       "      <td>S</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>889</th>\n",
       "      <td>890</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>Behr, Mr. Karl Howell</td>\n",
       "      <td>male</td>\n",
       "      <td>26.0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>111369</td>\n",
       "      <td>30.0000</td>\n",
       "      <td>C</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>890</th>\n",
       "      <td>891</td>\n",
       "      <td>0</td>\n",
       "      <td>3</td>\n",
       "      <td>Dooley, Mr. Patrick</td>\n",
       "      <td>male</td>\n",
       "      <td>32.0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>370376</td>\n",
       "      <td>7.7500</td>\n",
       "      <td>Q</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>891 rows × 11 columns</p>\n",
       "</div>"
      ]
     },
     "execution_count": 15,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "execution_count": 15
  },
  {
   "metadata": {},
   "cell_type": "markdown",
   "source": [
    "#### 处理 'Embarked' 缺失：\n",
    "\n",
    "只有三个类别，可通过乘客姓氏对其进行判断"
   ],
   "id": "ce366d04c6aff398"
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-03-25T04:02:29.775930Z",
     "start_time": "2025-03-25T04:02:29.770461Z"
    }
   },
   "cell_type": "code",
   "source": "df1['Embarked'].isna().astype(int).sum()",
   "id": "13310062231794a0",
   "outputs": [
    {
     "data": {
      "text/plain": [
       "np.int64(2)"
      ]
     },
     "execution_count": 16,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "execution_count": 16
  },
  {
   "metadata": {},
   "cell_type": "markdown",
   "source": [
    "***上一次是灾难，但这一次是幸运的，只存在 2 条缺失值。***\n",
    "\n",
    "我们可以直接通过搜索确定其出发地"
   ],
   "id": "fc03b4f9f0896a3b"
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-03-25T04:02:30.848482Z",
     "start_time": "2025-03-25T04:02:30.841168Z"
    }
   },
   "cell_type": "code",
   "source": "df1[df1['Embarked'].isna()]",
   "id": "7f4e910d0f28495f",
   "outputs": [
    {
     "data": {
      "text/plain": [
       "     PassengerId  Survived  Pclass                                       Name  \\\n",
       "61            62         1       1                        Icard, Miss. Amelie   \n",
       "829          830         1       1  Stone, Mrs. George Nelson (Martha Evelyn)   \n",
       "\n",
       "        Sex   Age  SibSp  Parch  Ticket  Fare Embarked  \n",
       "61   female  38.0      0      0  113572  80.0      NaN  \n",
       "829  female  62.0      0      0  113572  80.0      NaN  "
      ],
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>PassengerId</th>\n",
       "      <th>Survived</th>\n",
       "      <th>Pclass</th>\n",
       "      <th>Name</th>\n",
       "      <th>Sex</th>\n",
       "      <th>Age</th>\n",
       "      <th>SibSp</th>\n",
       "      <th>Parch</th>\n",
       "      <th>Ticket</th>\n",
       "      <th>Fare</th>\n",
       "      <th>Embarked</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>61</th>\n",
       "      <td>62</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>Icard, Miss. Amelie</td>\n",
       "      <td>female</td>\n",
       "      <td>38.0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>113572</td>\n",
       "      <td>80.0</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>829</th>\n",
       "      <td>830</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>Stone, Mrs. George Nelson (Martha Evelyn)</td>\n",
       "      <td>female</td>\n",
       "      <td>62.0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>113572</td>\n",
       "      <td>80.0</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ]
     },
     "execution_count": 17,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "execution_count": 17
  },
  {
   "metadata": {},
   "cell_type": "markdown",
   "source": [
    "值得注意的是，这两位 ID 不同的女性，她们 票号(Ticket) 以及 票价(Fare) 竟然是一样的，但她们之间并不是家庭关系。\n",
    "\n",
    "这也反映了当时的 **主仆共用团体票** 的历史实际情况，此类现象在头等舱乘客中较为常见，尤其是携带仆人或旅伴的富裕家庭。"
   ],
   "id": "e0dc0d0839429e44"
  },
  {
   "metadata": {},
   "cell_type": "markdown",
   "source": [
    "根据她们的姓氏推测：（AI网络搜索）\n",
    "\n",
    "- Icard, Miss. Amelie ：法国雇佣女仆\n",
    "- Stone, Mrs. George Nelson (Martha Evelyn) ：美国社交名流\n",
    "\n",
    "二人乘坐泰坦尼克号返回美国，大概率是从 **法国瑟堡(C)** 登船（泰坦尼克号在瑟堡接载了 274 名乘客，多为头等舱）"
   ],
   "id": "b71b7ed28c7dcbb6"
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-03-25T04:02:32.557834Z",
     "start_time": "2025-03-25T04:02:32.551971Z"
    }
   },
   "cell_type": "code",
   "source": [
    "df1['Embarked'] = df1['Embarked'].fillna('C')\n",
    "df1.iloc[61]"
   ],
   "id": "f110822ebd847a17",
   "outputs": [
    {
     "data": {
      "text/plain": [
       "PassengerId                     62\n",
       "Survived                         1\n",
       "Pclass                           1\n",
       "Name           Icard, Miss. Amelie\n",
       "Sex                         female\n",
       "Age                           38.0\n",
       "SibSp                            0\n",
       "Parch                            0\n",
       "Ticket                      113572\n",
       "Fare                          80.0\n",
       "Embarked                         C\n",
       "Name: 61, dtype: object"
      ]
     },
     "execution_count": 18,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "execution_count": 18
  },
  {
   "metadata": {},
   "cell_type": "markdown",
   "source": [
    "### df1 去除无用值\n",
    "\n",
    "哪些值对生存预测的无影响或影响较小？"
   ],
   "id": "72d86396b933ac4b"
  },
  {
   "metadata": {},
   "cell_type": "markdown",
   "source": [
    "**1. PassengerId**\n",
    "\n",
    "这对预测并没有什么作用。"
   ],
   "id": "aa889d3b29a90ba8"
  },
  {
   "metadata": {},
   "cell_type": "markdown",
   "source": "**2. Name**",
   "id": "1b9307e3d582ca21"
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-03-25T04:02:36.622916Z",
     "start_time": "2025-03-25T04:02:36.616495Z"
    }
   },
   "cell_type": "code",
   "source": "df_name_age.groupby('Name').count()",
   "id": "e2a8805feacfe206",
   "outputs": [
    {
     "data": {
      "text/plain": [
       "              Age\n",
       "Name             \n",
       "Capt            1\n",
       "Col             2\n",
       "Don             1\n",
       "Dr              6\n",
       "Jonkheer        1\n",
       "Lady            1\n",
       "Major           2\n",
       "Master         36\n",
       "Miss          146\n",
       "Mlle            2\n",
       "Mme             1\n",
       "Mr            398\n",
       "Mrs           108\n",
       "Ms              1\n",
       "Rev             6\n",
       "Sir             1\n",
       "the Countess    1"
      ],
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Age</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Name</th>\n",
       "      <th></th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>Capt</th>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Col</th>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Don</th>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Dr</th>\n",
       "      <td>6</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Jonkheer</th>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Lady</th>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Major</th>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Master</th>\n",
       "      <td>36</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Miss</th>\n",
       "      <td>146</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Mlle</th>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Mme</th>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Mr</th>\n",
       "      <td>398</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Mrs</th>\n",
       "      <td>108</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Ms</th>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Rev</th>\n",
       "      <td>6</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Sir</th>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>the Countess</th>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ]
     },
     "execution_count": 19,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "execution_count": 19
  },
  {
   "metadata": {},
   "cell_type": "markdown",
   "source": [
    "含有特殊称谓的人数较少，且社会地位高的人可能也会被称呼为 Mr、Mrs、Miss\n",
    "\n",
    "***因此虽然其在填补缺失值中作用显著，但对于生存预测来说并没有太大帮助。***"
   ],
   "id": "181377599651c03f"
  },
  {
   "metadata": {},
   "cell_type": "markdown",
   "source": "**3. Ticket**",
   "id": "cdb882286556a4eb"
  },
  {
   "metadata": {},
   "cell_type": "markdown",
   "source": "***先取出所有票号的数字号码***",
   "id": "3c60e5f284c7bf64"
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-03-25T04:02:39.620607Z",
     "start_time": "2025-03-25T04:02:39.615400Z"
    }
   },
   "cell_type": "code",
   "source": "df1['Ticket'] = df1['Ticket'].map(lambda x: x.split(' ')[-1] if x != 'LINE' else 300000).astype(int)",
   "id": "9967a80a5fae4997",
   "outputs": [],
   "execution_count": 20
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-03-25T04:02:40.108216Z",
     "start_time": "2025-03-25T04:02:40.100579Z"
    }
   },
   "cell_type": "code",
   "source": [
    "print(df1['Ticket'].min())\n",
    "print(df1['Ticket'].max())\n",
    "df1.head()"
   ],
   "id": "1046e11879cb9a",
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "3\n",
      "3101317\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "   PassengerId  Survived  Pclass  \\\n",
       "0            1         0       3   \n",
       "1            2         1       1   \n",
       "2            3         1       3   \n",
       "3            4         1       1   \n",
       "4            5         0       3   \n",
       "\n",
       "                                                Name     Sex   Age  SibSp  \\\n",
       "0                            Braund, Mr. Owen Harris    male  22.0      1   \n",
       "1  Cumings, Mrs. John Bradley (Florence Briggs Th...  female  38.0      1   \n",
       "2                             Heikkinen, Miss. Laina  female  26.0      0   \n",
       "3       Futrelle, Mrs. Jacques Heath (Lily May Peel)  female  35.0      1   \n",
       "4                           Allen, Mr. William Henry    male  35.0      0   \n",
       "\n",
       "   Parch   Ticket     Fare Embarked  \n",
       "0      0    21171   7.2500        S  \n",
       "1      0    17599  71.2833        C  \n",
       "2      0  3101282   7.9250        S  \n",
       "3      0   113803  53.1000        S  \n",
       "4      0   373450   8.0500        S  "
      ],
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>PassengerId</th>\n",
       "      <th>Survived</th>\n",
       "      <th>Pclass</th>\n",
       "      <th>Name</th>\n",
       "      <th>Sex</th>\n",
       "      <th>Age</th>\n",
       "      <th>SibSp</th>\n",
       "      <th>Parch</th>\n",
       "      <th>Ticket</th>\n",
       "      <th>Fare</th>\n",
       "      <th>Embarked</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>3</td>\n",
       "      <td>Braund, Mr. Owen Harris</td>\n",
       "      <td>male</td>\n",
       "      <td>22.0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>21171</td>\n",
       "      <td>7.2500</td>\n",
       "      <td>S</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>2</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>Cumings, Mrs. John Bradley (Florence Briggs Th...</td>\n",
       "      <td>female</td>\n",
       "      <td>38.0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>17599</td>\n",
       "      <td>71.2833</td>\n",
       "      <td>C</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>3</td>\n",
       "      <td>1</td>\n",
       "      <td>3</td>\n",
       "      <td>Heikkinen, Miss. Laina</td>\n",
       "      <td>female</td>\n",
       "      <td>26.0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>3101282</td>\n",
       "      <td>7.9250</td>\n",
       "      <td>S</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>4</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>Futrelle, Mrs. Jacques Heath (Lily May Peel)</td>\n",
       "      <td>female</td>\n",
       "      <td>35.0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>113803</td>\n",
       "      <td>53.1000</td>\n",
       "      <td>S</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>5</td>\n",
       "      <td>0</td>\n",
       "      <td>3</td>\n",
       "      <td>Allen, Mr. William Henry</td>\n",
       "      <td>male</td>\n",
       "      <td>35.0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>373450</td>\n",
       "      <td>8.0500</td>\n",
       "      <td>S</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ]
     },
     "execution_count": 21,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "execution_count": 21
  },
  {
   "metadata": {},
   "cell_type": "markdown",
   "source": "***找出三种票型的数字规律***",
   "id": "d0bd9c33aee8265"
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-03-25T04:02:42.728219Z",
     "start_time": "2025-03-25T04:02:42.721575Z"
    }
   },
   "cell_type": "code",
   "source": [
    "# 单独取出票型和票号两类特征值\n",
    "ticket = df1[['Pclass', 'Ticket', 'Survived']].copy()\n",
    "ticket"
   ],
   "id": "3e31b9189950acf0",
   "outputs": [
    {
     "data": {
      "text/plain": [
       "     Pclass   Ticket  Survived\n",
       "0         3    21171         0\n",
       "1         1    17599         1\n",
       "2         3  3101282         1\n",
       "3         1   113803         1\n",
       "4         3   373450         0\n",
       "..      ...      ...       ...\n",
       "886       2   211536         0\n",
       "887       1   112053         1\n",
       "888       3     6607         0\n",
       "889       1   111369         1\n",
       "890       3   370376         0\n",
       "\n",
       "[891 rows x 3 columns]"
      ],
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Pclass</th>\n",
       "      <th>Ticket</th>\n",
       "      <th>Survived</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>3</td>\n",
       "      <td>21171</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>1</td>\n",
       "      <td>17599</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>3</td>\n",
       "      <td>3101282</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>1</td>\n",
       "      <td>113803</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>3</td>\n",
       "      <td>373450</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>...</th>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>886</th>\n",
       "      <td>2</td>\n",
       "      <td>211536</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>887</th>\n",
       "      <td>1</td>\n",
       "      <td>112053</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>888</th>\n",
       "      <td>3</td>\n",
       "      <td>6607</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>889</th>\n",
       "      <td>1</td>\n",
       "      <td>111369</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>890</th>\n",
       "      <td>3</td>\n",
       "      <td>370376</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>891 rows × 3 columns</p>\n",
       "</div>"
      ]
     },
     "execution_count": 22,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "execution_count": 22
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-03-25T04:02:43.647192Z",
     "start_time": "2025-03-25T04:02:43.624146Z"
    }
   },
   "cell_type": "code",
   "source": [
    "# 将数字号码分为 311 个区间\n",
    "ticket_range = np.linspace(0, 3110000, 312)\n",
    "ticket['Ticket_layer'] = pd.cut(ticket['Ticket'], bins=ticket_range)\n",
    "ticket_ = ticket.groupby('Ticket_layer', observed=True).agg({'Pclass': 'mean', 'Survived': 'sum', 'Ticket': 'count'})\n",
    "ticket_['Survival_Rate'] = ticket_['Survived'] / ticket_['Ticket']\n",
    "ticket_"
   ],
   "id": "e36bc8dd3bcc5cf3",
   "outputs": [
    {
     "data": {
      "text/plain": [
       "                          Pclass  Survived  Ticket  Survival_Rate\n",
       "Ticket_layer                                                     \n",
       "(0.0, 10000.0]          2.781609        55     174       0.316092\n",
       "(10000.0, 20000.0]      1.261745        97     149       0.651007\n",
       "(20000.0, 30000.0]      2.066667        17      45       0.377778\n",
       "(30000.0, 40000.0]      1.930233        24      43       0.558140\n",
       "(40000.0, 50000.0]      3.000000         0       3       0.000000\n",
       "(50000.0, 60000.0]      3.000000         0       3       0.000000\n",
       "(60000.0, 70000.0]      3.000000         1       3       0.333333\n",
       "(110000.0, 120000.0]    1.000000        37      72       0.513889\n",
       "(210000.0, 220000.0]    2.000000         0       3       0.000000\n",
       "(220000.0, 230000.0]    2.000000         6       8       0.750000\n",
       "(230000.0, 240000.0]    2.000000        16      36       0.444444\n",
       "(240000.0, 250000.0]    2.000000        13      26       0.500000\n",
       "(250000.0, 260000.0]    2.000000         7      14       0.500000\n",
       "(260000.0, 270000.0]    3.000000         0       1       0.000000\n",
       "(290000.0, 300000.0]    3.000000         1       4       0.250000\n",
       "(310000.0, 320000.0]    3.000000         3      17       0.176471\n",
       "(320000.0, 330000.0]    3.000000         0       3       0.000000\n",
       "(330000.0, 340000.0]    3.000000         8      15       0.533333\n",
       "(340000.0, 350000.0]    3.000000        18     128       0.140625\n",
       "(350000.0, 360000.0]    3.000000         4      20       0.200000\n",
       "(360000.0, 370000.0]    3.000000        10      33       0.303030\n",
       "(370000.0, 380000.0]    3.000000         6      25       0.240000\n",
       "(380000.0, 390000.0]    3.000000         2      10       0.200000\n",
       "(390000.0, 400000.0]    3.000000         5      12       0.416667\n",
       "(3100000.0, 3110000.0]  3.000000        12      44       0.272727"
      ],
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Pclass</th>\n",
       "      <th>Survived</th>\n",
       "      <th>Ticket</th>\n",
       "      <th>Survival_Rate</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Ticket_layer</th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>(0.0, 10000.0]</th>\n",
       "      <td>2.781609</td>\n",
       "      <td>55</td>\n",
       "      <td>174</td>\n",
       "      <td>0.316092</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>(10000.0, 20000.0]</th>\n",
       "      <td>1.261745</td>\n",
       "      <td>97</td>\n",
       "      <td>149</td>\n",
       "      <td>0.651007</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>(20000.0, 30000.0]</th>\n",
       "      <td>2.066667</td>\n",
       "      <td>17</td>\n",
       "      <td>45</td>\n",
       "      <td>0.377778</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>(30000.0, 40000.0]</th>\n",
       "      <td>1.930233</td>\n",
       "      <td>24</td>\n",
       "      <td>43</td>\n",
       "      <td>0.558140</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>(40000.0, 50000.0]</th>\n",
       "      <td>3.000000</td>\n",
       "      <td>0</td>\n",
       "      <td>3</td>\n",
       "      <td>0.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>(50000.0, 60000.0]</th>\n",
       "      <td>3.000000</td>\n",
       "      <td>0</td>\n",
       "      <td>3</td>\n",
       "      <td>0.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>(60000.0, 70000.0]</th>\n",
       "      <td>3.000000</td>\n",
       "      <td>1</td>\n",
       "      <td>3</td>\n",
       "      <td>0.333333</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>(110000.0, 120000.0]</th>\n",
       "      <td>1.000000</td>\n",
       "      <td>37</td>\n",
       "      <td>72</td>\n",
       "      <td>0.513889</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>(210000.0, 220000.0]</th>\n",
       "      <td>2.000000</td>\n",
       "      <td>0</td>\n",
       "      <td>3</td>\n",
       "      <td>0.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>(220000.0, 230000.0]</th>\n",
       "      <td>2.000000</td>\n",
       "      <td>6</td>\n",
       "      <td>8</td>\n",
       "      <td>0.750000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>(230000.0, 240000.0]</th>\n",
       "      <td>2.000000</td>\n",
       "      <td>16</td>\n",
       "      <td>36</td>\n",
       "      <td>0.444444</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>(240000.0, 250000.0]</th>\n",
       "      <td>2.000000</td>\n",
       "      <td>13</td>\n",
       "      <td>26</td>\n",
       "      <td>0.500000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>(250000.0, 260000.0]</th>\n",
       "      <td>2.000000</td>\n",
       "      <td>7</td>\n",
       "      <td>14</td>\n",
       "      <td>0.500000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>(260000.0, 270000.0]</th>\n",
       "      <td>3.000000</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>(290000.0, 300000.0]</th>\n",
       "      <td>3.000000</td>\n",
       "      <td>1</td>\n",
       "      <td>4</td>\n",
       "      <td>0.250000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>(310000.0, 320000.0]</th>\n",
       "      <td>3.000000</td>\n",
       "      <td>3</td>\n",
       "      <td>17</td>\n",
       "      <td>0.176471</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>(320000.0, 330000.0]</th>\n",
       "      <td>3.000000</td>\n",
       "      <td>0</td>\n",
       "      <td>3</td>\n",
       "      <td>0.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>(330000.0, 340000.0]</th>\n",
       "      <td>3.000000</td>\n",
       "      <td>8</td>\n",
       "      <td>15</td>\n",
       "      <td>0.533333</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>(340000.0, 350000.0]</th>\n",
       "      <td>3.000000</td>\n",
       "      <td>18</td>\n",
       "      <td>128</td>\n",
       "      <td>0.140625</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>(350000.0, 360000.0]</th>\n",
       "      <td>3.000000</td>\n",
       "      <td>4</td>\n",
       "      <td>20</td>\n",
       "      <td>0.200000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>(360000.0, 370000.0]</th>\n",
       "      <td>3.000000</td>\n",
       "      <td>10</td>\n",
       "      <td>33</td>\n",
       "      <td>0.303030</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>(370000.0, 380000.0]</th>\n",
       "      <td>3.000000</td>\n",
       "      <td>6</td>\n",
       "      <td>25</td>\n",
       "      <td>0.240000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>(380000.0, 390000.0]</th>\n",
       "      <td>3.000000</td>\n",
       "      <td>2</td>\n",
       "      <td>10</td>\n",
       "      <td>0.200000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>(390000.0, 400000.0]</th>\n",
       "      <td>3.000000</td>\n",
       "      <td>5</td>\n",
       "      <td>12</td>\n",
       "      <td>0.416667</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>(3100000.0, 3110000.0]</th>\n",
       "      <td>3.000000</td>\n",
       "      <td>12</td>\n",
       "      <td>44</td>\n",
       "      <td>0.272727</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ]
     },
     "execution_count": 23,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "execution_count": 23
  },
  {
   "metadata": {},
   "cell_type": "markdown",
   "source": [
    "***票号特征显得有些杂乱无章，寻找规律后可以发现，数字基本满足：***\n",
    "- 头等舱票号区间：**(10000, 20000]** 和 **(110000, 120000]**\n",
    "- 二等舱票号区间：**(20000, 40000]** 和 **(210000, 260000]**\n",
    "- 三等舱票号区间：**(0, 10000]** 、 **(40000, 70000]** 、 **(260000, 400000]** 和 **(3100000, 3110000]**\n",
    "\n",
    "间接影响生存的特征，暂时保留"
   ],
   "id": "5f9348177902a605"
  },
  {
   "metadata": {},
   "cell_type": "markdown",
   "source": "**4. Embarked**",
   "id": "8a1bae175315c2fa"
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-03-25T04:07:01.216392Z",
     "start_time": "2025-03-25T04:07:01.203688Z"
    }
   },
   "cell_type": "code",
   "source": [
    "embarked = df1.groupby('Embarked').agg({'Survived': 'sum', 'Pclass' :'mean', 'Embarked': 'count'})\n",
    "embarked['Survival_Rate'] = embarked['Survived'] / embarked['Embarked']\n",
    "embarked"
   ],
   "id": "de962ad0d6b716bd",
   "outputs": [
    {
     "data": {
      "text/plain": [
       "          Survived    Pclass  Embarked  Survival_Rate\n",
       "Embarked                                             \n",
       "C               95  1.876471       170       0.558824\n",
       "Q               30  2.909091        77       0.389610\n",
       "S              217  2.350932       644       0.336957"
      ],
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Survived</th>\n",
       "      <th>Pclass</th>\n",
       "      <th>Embarked</th>\n",
       "      <th>Survival_Rate</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Embarked</th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>C</th>\n",
       "      <td>95</td>\n",
       "      <td>1.876471</td>\n",
       "      <td>170</td>\n",
       "      <td>0.558824</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Q</th>\n",
       "      <td>30</td>\n",
       "      <td>2.909091</td>\n",
       "      <td>77</td>\n",
       "      <td>0.389610</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>S</th>\n",
       "      <td>217</td>\n",
       "      <td>2.350932</td>\n",
       "      <td>644</td>\n",
       "      <td>0.336957</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ]
     },
     "execution_count": 24,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "execution_count": 24
  },
  {
   "metadata": {},
   "cell_type": "markdown",
   "source": [
    "***C 港口的乘客中 头等舱 占比较高***\n",
    "\n",
    "***C 港口乘客的生存率约为 55%，高于 S 港口的 34% 和 Q 港口的 39%***\n",
    "\n",
    "间接影响生存的特征，暂时保留"
   ],
   "id": "6c39b1e98bebcf5"
  },
  {
   "metadata": {},
   "cell_type": "markdown",
   "source": "**去除 PassengerId 和 Name 两个特征值**",
   "id": "a86f2dd0e4d9d34c"
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-03-25T04:17:44.157607Z",
     "start_time": "2025-03-25T04:17:44.147794Z"
    }
   },
   "cell_type": "code",
   "source": [
    "df1 = df1.drop(['PassengerId', 'Name'], axis=1)\n",
    "df1"
   ],
   "id": "451b1bb58715f810",
   "outputs": [
    {
     "data": {
      "text/plain": [
       "     Survived  Pclass     Sex   Age  SibSp  Parch   Ticket     Fare Embarked\n",
       "0           0       3    male  22.0      1      0    21171   7.2500        S\n",
       "1           1       1  female  38.0      1      0    17599  71.2833        C\n",
       "2           1       3  female  26.0      0      0  3101282   7.9250        S\n",
       "3           1       1  female  35.0      1      0   113803  53.1000        S\n",
       "4           0       3    male  35.0      0      0   373450   8.0500        S\n",
       "..        ...     ...     ...   ...    ...    ...      ...      ...      ...\n",
       "886         0       2    male  27.0      0      0   211536  13.0000        S\n",
       "887         1       1  female  19.0      0      0   112053  30.0000        S\n",
       "888         0       3  female  22.0      1      2     6607  23.4500        S\n",
       "889         1       1    male  26.0      0      0   111369  30.0000        C\n",
       "890         0       3    male  32.0      0      0   370376   7.7500        Q\n",
       "\n",
       "[891 rows x 9 columns]"
      ],
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Survived</th>\n",
       "      <th>Pclass</th>\n",
       "      <th>Sex</th>\n",
       "      <th>Age</th>\n",
       "      <th>SibSp</th>\n",
       "      <th>Parch</th>\n",
       "      <th>Ticket</th>\n",
       "      <th>Fare</th>\n",
       "      <th>Embarked</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>0</td>\n",
       "      <td>3</td>\n",
       "      <td>male</td>\n",
       "      <td>22.0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>21171</td>\n",
       "      <td>7.2500</td>\n",
       "      <td>S</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>female</td>\n",
       "      <td>38.0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>17599</td>\n",
       "      <td>71.2833</td>\n",
       "      <td>C</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>1</td>\n",
       "      <td>3</td>\n",
       "      <td>female</td>\n",
       "      <td>26.0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>3101282</td>\n",
       "      <td>7.9250</td>\n",
       "      <td>S</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>female</td>\n",
       "      <td>35.0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>113803</td>\n",
       "      <td>53.1000</td>\n",
       "      <td>S</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>0</td>\n",
       "      <td>3</td>\n",
       "      <td>male</td>\n",
       "      <td>35.0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>373450</td>\n",
       "      <td>8.0500</td>\n",
       "      <td>S</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>...</th>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>886</th>\n",
       "      <td>0</td>\n",
       "      <td>2</td>\n",
       "      <td>male</td>\n",
       "      <td>27.0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>211536</td>\n",
       "      <td>13.0000</td>\n",
       "      <td>S</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>887</th>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>female</td>\n",
       "      <td>19.0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>112053</td>\n",
       "      <td>30.0000</td>\n",
       "      <td>S</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>888</th>\n",
       "      <td>0</td>\n",
       "      <td>3</td>\n",
       "      <td>female</td>\n",
       "      <td>22.0</td>\n",
       "      <td>1</td>\n",
       "      <td>2</td>\n",
       "      <td>6607</td>\n",
       "      <td>23.4500</td>\n",
       "      <td>S</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>889</th>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>male</td>\n",
       "      <td>26.0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>111369</td>\n",
       "      <td>30.0000</td>\n",
       "      <td>C</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>890</th>\n",
       "      <td>0</td>\n",
       "      <td>3</td>\n",
       "      <td>male</td>\n",
       "      <td>32.0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>370376</td>\n",
       "      <td>7.7500</td>\n",
       "      <td>Q</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>891 rows × 9 columns</p>\n",
       "</div>"
      ]
     },
     "execution_count": 25,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "execution_count": 25
  },
  {
   "metadata": {},
   "cell_type": "markdown",
   "source": "### df1 转变文本值为数值",
   "id": "e6b7ccc903fc27c8"
  },
  {
   "metadata": {},
   "cell_type": "markdown",
   "source": [
    "**1. Sex**\n",
    "\n",
    "male = 1, female = 0"
   ],
   "id": "bcfc7c3655c21480"
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-03-25T04:17:51.066151Z",
     "start_time": "2025-03-25T04:17:51.058664Z"
    }
   },
   "cell_type": "code",
   "source": [
    "df1['Sex'] = (df1['Sex'] == 'male').astype(int)\n",
    "df1"
   ],
   "id": "f94d7a9a011475ad",
   "outputs": [
    {
     "data": {
      "text/plain": [
       "     Survived  Pclass  Sex   Age  SibSp  Parch   Ticket     Fare Embarked\n",
       "0           0       3    1  22.0      1      0    21171   7.2500        S\n",
       "1           1       1    0  38.0      1      0    17599  71.2833        C\n",
       "2           1       3    0  26.0      0      0  3101282   7.9250        S\n",
       "3           1       1    0  35.0      1      0   113803  53.1000        S\n",
       "4           0       3    1  35.0      0      0   373450   8.0500        S\n",
       "..        ...     ...  ...   ...    ...    ...      ...      ...      ...\n",
       "886         0       2    1  27.0      0      0   211536  13.0000        S\n",
       "887         1       1    0  19.0      0      0   112053  30.0000        S\n",
       "888         0       3    0  22.0      1      2     6607  23.4500        S\n",
       "889         1       1    1  26.0      0      0   111369  30.0000        C\n",
       "890         0       3    1  32.0      0      0   370376   7.7500        Q\n",
       "\n",
       "[891 rows x 9 columns]"
      ],
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Survived</th>\n",
       "      <th>Pclass</th>\n",
       "      <th>Sex</th>\n",
       "      <th>Age</th>\n",
       "      <th>SibSp</th>\n",
       "      <th>Parch</th>\n",
       "      <th>Ticket</th>\n",
       "      <th>Fare</th>\n",
       "      <th>Embarked</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>0</td>\n",
       "      <td>3</td>\n",
       "      <td>1</td>\n",
       "      <td>22.0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>21171</td>\n",
       "      <td>7.2500</td>\n",
       "      <td>S</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>38.0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>17599</td>\n",
       "      <td>71.2833</td>\n",
       "      <td>C</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>1</td>\n",
       "      <td>3</td>\n",
       "      <td>0</td>\n",
       "      <td>26.0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>3101282</td>\n",
       "      <td>7.9250</td>\n",
       "      <td>S</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>35.0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>113803</td>\n",
       "      <td>53.1000</td>\n",
       "      <td>S</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>0</td>\n",
       "      <td>3</td>\n",
       "      <td>1</td>\n",
       "      <td>35.0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>373450</td>\n",
       "      <td>8.0500</td>\n",
       "      <td>S</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>...</th>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>886</th>\n",
       "      <td>0</td>\n",
       "      <td>2</td>\n",
       "      <td>1</td>\n",
       "      <td>27.0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>211536</td>\n",
       "      <td>13.0000</td>\n",
       "      <td>S</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>887</th>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>19.0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>112053</td>\n",
       "      <td>30.0000</td>\n",
       "      <td>S</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>888</th>\n",
       "      <td>0</td>\n",
       "      <td>3</td>\n",
       "      <td>0</td>\n",
       "      <td>22.0</td>\n",
       "      <td>1</td>\n",
       "      <td>2</td>\n",
       "      <td>6607</td>\n",
       "      <td>23.4500</td>\n",
       "      <td>S</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>889</th>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>26.0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>111369</td>\n",
       "      <td>30.0000</td>\n",
       "      <td>C</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>890</th>\n",
       "      <td>0</td>\n",
       "      <td>3</td>\n",
       "      <td>1</td>\n",
       "      <td>32.0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>370376</td>\n",
       "      <td>7.7500</td>\n",
       "      <td>Q</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>891 rows × 9 columns</p>\n",
       "</div>"
      ]
     },
     "execution_count": 26,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "execution_count": 26
  },
  {
   "metadata": {},
   "cell_type": "markdown",
   "source": [
    "**2. Embarked**\n",
    "\n",
    "间接影响生存的特征，暂时不进行文本转换"
   ],
   "id": "7067d5620d3f86f4"
  },
  {
   "metadata": {},
   "cell_type": "markdown",
   "source": "### df1 使用组合特征值",
   "id": "534e7ca6a978673f"
  },
  {
   "metadata": {},
   "cell_type": "markdown",
   "source": [
    "**1. SibSp | Parch**\n",
    "\n",
    "组合为家庭 (Family)"
   ],
   "id": "87a7a51db30da9f4"
  },
  {
   "metadata": {},
   "cell_type": "markdown",
   "source": [
    "我们知道，舱室的购买是按照家庭记录的，同一个家庭其 Ticket | Fare | Cabin 信息一致。\n",
    "\n",
    "也就是说，船票的购买是以家庭为单位的，因此将 SibSp | Parch 组合为 Family 。"
   ],
   "id": "fff40bc68a99b3d1"
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-03-25T04:24:22.701900Z",
     "start_time": "2025-03-25T04:24:22.692613Z"
    }
   },
   "cell_type": "code",
   "source": [
    "df1['Family'] = df1['SibSp'] + df1['Parch'] + 1\n",
    "df1 = df1.drop(['SibSp', 'Parch'], axis=1)\n",
    "df1"
   ],
   "id": "66232a8982ae469f",
   "outputs": [
    {
     "data": {
      "text/plain": [
       "     Survived  Pclass  Sex   Age   Ticket     Fare Embarked  Family\n",
       "0           0       3    1  22.0    21171   7.2500        S       2\n",
       "1           1       1    0  38.0    17599  71.2833        C       2\n",
       "2           1       3    0  26.0  3101282   7.9250        S       1\n",
       "3           1       1    0  35.0   113803  53.1000        S       2\n",
       "4           0       3    1  35.0   373450   8.0500        S       1\n",
       "..        ...     ...  ...   ...      ...      ...      ...     ...\n",
       "886         0       2    1  27.0   211536  13.0000        S       1\n",
       "887         1       1    0  19.0   112053  30.0000        S       1\n",
       "888         0       3    0  22.0     6607  23.4500        S       4\n",
       "889         1       1    1  26.0   111369  30.0000        C       1\n",
       "890         0       3    1  32.0   370376   7.7500        Q       1\n",
       "\n",
       "[891 rows x 8 columns]"
      ],
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Survived</th>\n",
       "      <th>Pclass</th>\n",
       "      <th>Sex</th>\n",
       "      <th>Age</th>\n",
       "      <th>Ticket</th>\n",
       "      <th>Fare</th>\n",
       "      <th>Embarked</th>\n",
       "      <th>Family</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>0</td>\n",
       "      <td>3</td>\n",
       "      <td>1</td>\n",
       "      <td>22.0</td>\n",
       "      <td>21171</td>\n",
       "      <td>7.2500</td>\n",
       "      <td>S</td>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>38.0</td>\n",
       "      <td>17599</td>\n",
       "      <td>71.2833</td>\n",
       "      <td>C</td>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>1</td>\n",
       "      <td>3</td>\n",
       "      <td>0</td>\n",
       "      <td>26.0</td>\n",
       "      <td>3101282</td>\n",
       "      <td>7.9250</td>\n",
       "      <td>S</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>35.0</td>\n",
       "      <td>113803</td>\n",
       "      <td>53.1000</td>\n",
       "      <td>S</td>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>0</td>\n",
       "      <td>3</td>\n",
       "      <td>1</td>\n",
       "      <td>35.0</td>\n",
       "      <td>373450</td>\n",
       "      <td>8.0500</td>\n",
       "      <td>S</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>...</th>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>886</th>\n",
       "      <td>0</td>\n",
       "      <td>2</td>\n",
       "      <td>1</td>\n",
       "      <td>27.0</td>\n",
       "      <td>211536</td>\n",
       "      <td>13.0000</td>\n",
       "      <td>S</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>887</th>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>19.0</td>\n",
       "      <td>112053</td>\n",
       "      <td>30.0000</td>\n",
       "      <td>S</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>888</th>\n",
       "      <td>0</td>\n",
       "      <td>3</td>\n",
       "      <td>0</td>\n",
       "      <td>22.0</td>\n",
       "      <td>6607</td>\n",
       "      <td>23.4500</td>\n",
       "      <td>S</td>\n",
       "      <td>4</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>889</th>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>26.0</td>\n",
       "      <td>111369</td>\n",
       "      <td>30.0000</td>\n",
       "      <td>C</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>890</th>\n",
       "      <td>0</td>\n",
       "      <td>3</td>\n",
       "      <td>1</td>\n",
       "      <td>32.0</td>\n",
       "      <td>370376</td>\n",
       "      <td>7.7500</td>\n",
       "      <td>Q</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>891 rows × 8 columns</p>\n",
       "</div>"
      ]
     },
     "execution_count": 27,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "execution_count": 27
  },
  {
   "metadata": {},
   "cell_type": "markdown",
   "source": "***简单探索***",
   "id": "2d2e00b5b06ba2d7"
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-03-25T04:24:24.288086Z",
     "start_time": "2025-03-25T04:24:24.278042Z"
    }
   },
   "cell_type": "code",
   "source": [
    "family = df1.groupby('Family').agg({'Survived': 'sum', 'Family': 'count', 'Pclass': 'mean', 'Fare': 'mean'})\n",
    "family['Survival_Rate'] = family['Survived'] / family['Family']\n",
    "family['Single_mean_Fare'] = family['Fare'] / family.index\n",
    "family"
   ],
   "id": "c081d8ea713bbf60",
   "outputs": [
    {
     "data": {
      "text/plain": [
       "        Survived  Family    Pclass       Fare  Survival_Rate  Single_mean_Fare\n",
       "Family                                                                        \n",
       "1            163     537  2.400372  21.242689       0.303538         21.242689\n",
       "2             89     161  1.919255  49.894129       0.552795         24.947064\n",
       "3             59     102  2.225490  39.692482       0.578431         13.230827\n",
       "4             21      29  2.068966  54.864510       0.724138         13.716128\n",
       "5              3      15  2.666667  58.094453       0.200000         11.618891\n",
       "6              3      22  2.590909  73.722727       0.136364         12.287121\n",
       "7              4      12  3.000000  29.366667       0.333333          4.195238\n",
       "8              0       6  3.000000  46.900000       0.000000          5.862500\n",
       "11             0       7  3.000000  69.550000       0.000000          6.322727"
      ],
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Survived</th>\n",
       "      <th>Family</th>\n",
       "      <th>Pclass</th>\n",
       "      <th>Fare</th>\n",
       "      <th>Survival_Rate</th>\n",
       "      <th>Single_mean_Fare</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Family</th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>163</td>\n",
       "      <td>537</td>\n",
       "      <td>2.400372</td>\n",
       "      <td>21.242689</td>\n",
       "      <td>0.303538</td>\n",
       "      <td>21.242689</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>89</td>\n",
       "      <td>161</td>\n",
       "      <td>1.919255</td>\n",
       "      <td>49.894129</td>\n",
       "      <td>0.552795</td>\n",
       "      <td>24.947064</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>59</td>\n",
       "      <td>102</td>\n",
       "      <td>2.225490</td>\n",
       "      <td>39.692482</td>\n",
       "      <td>0.578431</td>\n",
       "      <td>13.230827</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>21</td>\n",
       "      <td>29</td>\n",
       "      <td>2.068966</td>\n",
       "      <td>54.864510</td>\n",
       "      <td>0.724138</td>\n",
       "      <td>13.716128</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>3</td>\n",
       "      <td>15</td>\n",
       "      <td>2.666667</td>\n",
       "      <td>58.094453</td>\n",
       "      <td>0.200000</td>\n",
       "      <td>11.618891</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>3</td>\n",
       "      <td>22</td>\n",
       "      <td>2.590909</td>\n",
       "      <td>73.722727</td>\n",
       "      <td>0.136364</td>\n",
       "      <td>12.287121</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7</th>\n",
       "      <td>4</td>\n",
       "      <td>12</td>\n",
       "      <td>3.000000</td>\n",
       "      <td>29.366667</td>\n",
       "      <td>0.333333</td>\n",
       "      <td>4.195238</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>8</th>\n",
       "      <td>0</td>\n",
       "      <td>6</td>\n",
       "      <td>3.000000</td>\n",
       "      <td>46.900000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>5.862500</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>11</th>\n",
       "      <td>0</td>\n",
       "      <td>7</td>\n",
       "      <td>3.000000</td>\n",
       "      <td>69.550000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>6.322727</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ]
     },
     "execution_count": 28,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "execution_count": 28
  },
  {
   "metadata": {},
   "cell_type": "markdown",
   "source": [
    "1. 家庭人数过多和过少生存率都较低\n",
    "2. 其中 4 人家庭的生存率是最高的，达到了 72%\n",
    "3. 平均单人票价是随着家庭人数变多而普遍降低\n",
    "4. 家庭人数过多，其购买的票型大概率为三等"
   ],
   "id": "d832457138ff0a8b"
  },
  {
   "metadata": {},
   "cell_type": "markdown",
   "source": [
    "**2. Family | Fare**\n",
    "\n",
    "单人票价 (Single_Fare)"
   ],
   "id": "6d900282fee6a4eb"
  },
  {
   "metadata": {},
   "cell_type": "markdown",
   "source": "既然 **票价(Fare)** 是按照家庭计算，那么 **单人票价(Single_Fare)** 更能体现个体的社会地位。",
   "id": "ddfb43789e3166ab"
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-03-25T04:24:27.779225Z",
     "start_time": "2025-03-25T04:24:27.771055Z"
    }
   },
   "cell_type": "code",
   "source": [
    "df1['Single_Fare'] = df1['Fare'] / df1['Family']\n",
    "df1"
   ],
   "id": "2b78ee9ee3623a92",
   "outputs": [
    {
     "data": {
      "text/plain": [
       "     Survived  Pclass  Sex   Age   Ticket     Fare Embarked  Family  \\\n",
       "0           0       3    1  22.0    21171   7.2500        S       2   \n",
       "1           1       1    0  38.0    17599  71.2833        C       2   \n",
       "2           1       3    0  26.0  3101282   7.9250        S       1   \n",
       "3           1       1    0  35.0   113803  53.1000        S       2   \n",
       "4           0       3    1  35.0   373450   8.0500        S       1   \n",
       "..        ...     ...  ...   ...      ...      ...      ...     ...   \n",
       "886         0       2    1  27.0   211536  13.0000        S       1   \n",
       "887         1       1    0  19.0   112053  30.0000        S       1   \n",
       "888         0       3    0  22.0     6607  23.4500        S       4   \n",
       "889         1       1    1  26.0   111369  30.0000        C       1   \n",
       "890         0       3    1  32.0   370376   7.7500        Q       1   \n",
       "\n",
       "     Single_Fare  \n",
       "0        3.62500  \n",
       "1       35.64165  \n",
       "2        7.92500  \n",
       "3       26.55000  \n",
       "4        8.05000  \n",
       "..           ...  \n",
       "886     13.00000  \n",
       "887     30.00000  \n",
       "888      5.86250  \n",
       "889     30.00000  \n",
       "890      7.75000  \n",
       "\n",
       "[891 rows x 9 columns]"
      ],
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Survived</th>\n",
       "      <th>Pclass</th>\n",
       "      <th>Sex</th>\n",
       "      <th>Age</th>\n",
       "      <th>Ticket</th>\n",
       "      <th>Fare</th>\n",
       "      <th>Embarked</th>\n",
       "      <th>Family</th>\n",
       "      <th>Single_Fare</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>0</td>\n",
       "      <td>3</td>\n",
       "      <td>1</td>\n",
       "      <td>22.0</td>\n",
       "      <td>21171</td>\n",
       "      <td>7.2500</td>\n",
       "      <td>S</td>\n",
       "      <td>2</td>\n",
       "      <td>3.62500</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>38.0</td>\n",
       "      <td>17599</td>\n",
       "      <td>71.2833</td>\n",
       "      <td>C</td>\n",
       "      <td>2</td>\n",
       "      <td>35.64165</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>1</td>\n",
       "      <td>3</td>\n",
       "      <td>0</td>\n",
       "      <td>26.0</td>\n",
       "      <td>3101282</td>\n",
       "      <td>7.9250</td>\n",
       "      <td>S</td>\n",
       "      <td>1</td>\n",
       "      <td>7.92500</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>35.0</td>\n",
       "      <td>113803</td>\n",
       "      <td>53.1000</td>\n",
       "      <td>S</td>\n",
       "      <td>2</td>\n",
       "      <td>26.55000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>0</td>\n",
       "      <td>3</td>\n",
       "      <td>1</td>\n",
       "      <td>35.0</td>\n",
       "      <td>373450</td>\n",
       "      <td>8.0500</td>\n",
       "      <td>S</td>\n",
       "      <td>1</td>\n",
       "      <td>8.05000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>...</th>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>886</th>\n",
       "      <td>0</td>\n",
       "      <td>2</td>\n",
       "      <td>1</td>\n",
       "      <td>27.0</td>\n",
       "      <td>211536</td>\n",
       "      <td>13.0000</td>\n",
       "      <td>S</td>\n",
       "      <td>1</td>\n",
       "      <td>13.00000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>887</th>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>19.0</td>\n",
       "      <td>112053</td>\n",
       "      <td>30.0000</td>\n",
       "      <td>S</td>\n",
       "      <td>1</td>\n",
       "      <td>30.00000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>888</th>\n",
       "      <td>0</td>\n",
       "      <td>3</td>\n",
       "      <td>0</td>\n",
       "      <td>22.0</td>\n",
       "      <td>6607</td>\n",
       "      <td>23.4500</td>\n",
       "      <td>S</td>\n",
       "      <td>4</td>\n",
       "      <td>5.86250</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>889</th>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>26.0</td>\n",
       "      <td>111369</td>\n",
       "      <td>30.0000</td>\n",
       "      <td>C</td>\n",
       "      <td>1</td>\n",
       "      <td>30.00000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>890</th>\n",
       "      <td>0</td>\n",
       "      <td>3</td>\n",
       "      <td>1</td>\n",
       "      <td>32.0</td>\n",
       "      <td>370376</td>\n",
       "      <td>7.7500</td>\n",
       "      <td>Q</td>\n",
       "      <td>1</td>\n",
       "      <td>7.75000</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>891 rows × 9 columns</p>\n",
       "</div>"
      ]
     },
     "execution_count": 29,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "execution_count": 29
  },
  {
   "metadata": {},
   "cell_type": "markdown",
   "source": "***简单探索***",
   "id": "4d4b73e991b9507e"
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-03-25T04:24:30.081110Z",
     "start_time": "2025-03-25T04:24:30.077224Z"
    }
   },
   "cell_type": "code",
   "source": [
    "print(df1['Single_Fare'].max())\n",
    "print(df1['Single_Fare'].min())"
   ],
   "id": "1c25d4fbf063c7b7",
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "512.3292\n",
      "0.0\n"
     ]
    }
   ],
   "execution_count": 30
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-03-25T04:24:37.144762Z",
     "start_time": "2025-03-25T04:24:37.131696Z"
    }
   },
   "cell_type": "code",
   "source": [
    "single_fare_layer = df1[['Pclass', 'Age', 'Family', 'Single_Fare', 'Survived']].copy()\n",
    "bins = np.linspace(-10, 520, 11)\n",
    "single_fare_layer['Single_Fare_Layer'] = pd.cut(single_fare_layer['Single_Fare'], bins=bins)\n",
    "single_fare = single_fare_layer.groupby('Single_Fare_Layer', observed=True).agg({'Pclass': 'mean', 'Age': 'mean', 'Family': 'mean', 'Survived': 'sum', 'Single_Fare_Layer': 'count'})\n",
    "single_fare['Survival_Rate'] = single_fare['Survived'] / single_fare['Single_Fare_Layer']\n",
    "single_fare"
   ],
   "id": "95a31a7f5b9028d8",
   "outputs": [
    {
     "data": {
      "text/plain": [
       "                     Pclass        Age    Family  Survived  Single_Fare_Layer  \\\n",
       "Single_Fare_Layer                                                               \n",
       "(-10.0, 43.0]      2.423267  29.387587  1.923267       282                808   \n",
       "(43.0, 96.0]       1.262295  32.770492  1.885246        42                 61   \n",
       "(96.0, 149.0]      1.000000  32.833333  1.416667        10                 12   \n",
       "(149.0, 202.0]     1.000000  31.000000  1.000000         2                  2   \n",
       "(202.0, 255.0]     1.000000  34.600000  1.000000         3                  5   \n",
       "(255.0, 308.0]     1.000000  36.000000  2.000000         1                  1   \n",
       "(467.0, 520.0]     1.000000  35.000000  1.000000         2                  2   \n",
       "\n",
       "                   Survival_Rate  \n",
       "Single_Fare_Layer                 \n",
       "(-10.0, 43.0]           0.349010  \n",
       "(43.0, 96.0]            0.688525  \n",
       "(96.0, 149.0]           0.833333  \n",
       "(149.0, 202.0]          1.000000  \n",
       "(202.0, 255.0]          0.600000  \n",
       "(255.0, 308.0]          1.000000  \n",
       "(467.0, 520.0]          1.000000  "
      ],
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Pclass</th>\n",
       "      <th>Age</th>\n",
       "      <th>Family</th>\n",
       "      <th>Survived</th>\n",
       "      <th>Single_Fare_Layer</th>\n",
       "      <th>Survival_Rate</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Single_Fare_Layer</th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>(-10.0, 43.0]</th>\n",
       "      <td>2.423267</td>\n",
       "      <td>29.387587</td>\n",
       "      <td>1.923267</td>\n",
       "      <td>282</td>\n",
       "      <td>808</td>\n",
       "      <td>0.349010</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>(43.0, 96.0]</th>\n",
       "      <td>1.262295</td>\n",
       "      <td>32.770492</td>\n",
       "      <td>1.885246</td>\n",
       "      <td>42</td>\n",
       "      <td>61</td>\n",
       "      <td>0.688525</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>(96.0, 149.0]</th>\n",
       "      <td>1.000000</td>\n",
       "      <td>32.833333</td>\n",
       "      <td>1.416667</td>\n",
       "      <td>10</td>\n",
       "      <td>12</td>\n",
       "      <td>0.833333</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>(149.0, 202.0]</th>\n",
       "      <td>1.000000</td>\n",
       "      <td>31.000000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>2</td>\n",
       "      <td>2</td>\n",
       "      <td>1.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>(202.0, 255.0]</th>\n",
       "      <td>1.000000</td>\n",
       "      <td>34.600000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>3</td>\n",
       "      <td>5</td>\n",
       "      <td>0.600000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>(255.0, 308.0]</th>\n",
       "      <td>1.000000</td>\n",
       "      <td>36.000000</td>\n",
       "      <td>2.000000</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>1.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>(467.0, 520.0]</th>\n",
       "      <td>1.000000</td>\n",
       "      <td>35.000000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>2</td>\n",
       "      <td>2</td>\n",
       "      <td>1.000000</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ]
     },
     "execution_count": 31,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "execution_count": 31
  },
  {
   "metadata": {},
   "cell_type": "markdown",
   "source": "***除异常值外，单人票价越高，票型越好，年龄越老，家庭人数越少，生存率越大。***",
   "id": "c32209f3860d8b11"
  },
  {
   "metadata": {},
   "cell_type": "markdown",
   "source": "### 其他特征简单探索",
   "id": "b1f82c3831948950"
  },
  {
   "metadata": {},
   "cell_type": "markdown",
   "source": "**1. Pclass**",
   "id": "21172dfcc1a53185"
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-03-23T08:47:52.642213Z",
     "start_time": "2025-03-23T08:47:52.633497Z"
    }
   },
   "cell_type": "code",
   "source": [
    "pclass = df1.groupby('Pclass').agg({'Age': 'mean', 'Family': 'mean', 'Single_Fare': 'mean', 'Survived': 'sum', 'Pclass': 'count'})\n",
    "pclass['Survival_Rate'] = pclass['Survived'] / pclass['Pclass']\n",
    "pclass"
   ],
   "id": "5aeb6235464501ec",
   "outputs": [
    {
     "data": {
      "text/plain": [
       "              Age    Family  Single_Fare  Survived  Pclass  Survival_Rate\n",
       "Pclass                                                                   \n",
       "1       37.515833  1.773148    52.936943       136     216       0.629630\n",
       "2       29.895815  1.782609    12.698832        87     184       0.472826\n",
       "3       26.221833  2.008147     8.094756       119     491       0.242363"
      ],
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Age</th>\n",
       "      <th>Family</th>\n",
       "      <th>Single_Fare</th>\n",
       "      <th>Survived</th>\n",
       "      <th>Pclass</th>\n",
       "      <th>Survival_Rate</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Pclass</th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>37.515833</td>\n",
       "      <td>1.773148</td>\n",
       "      <td>52.936943</td>\n",
       "      <td>136</td>\n",
       "      <td>216</td>\n",
       "      <td>0.629630</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>29.895815</td>\n",
       "      <td>1.782609</td>\n",
       "      <td>12.698832</td>\n",
       "      <td>87</td>\n",
       "      <td>184</td>\n",
       "      <td>0.472826</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>26.221833</td>\n",
       "      <td>2.008147</td>\n",
       "      <td>8.094756</td>\n",
       "      <td>119</td>\n",
       "      <td>491</td>\n",
       "      <td>0.242363</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ]
     },
     "execution_count": 32,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "execution_count": 32
  },
  {
   "metadata": {},
   "cell_type": "markdown",
   "source": [
    "***根据票型分组呈现出相当规律的情况***\n",
    "\n",
    "随着票型的变化：\n",
    "\n",
    "1. 年龄呈现年轻化趋势\n",
    "2. 家庭人数呈现增多\n",
    "3. 单人花费降低显著\n",
    "4. 生存率逐步降低\n",
    "\n",
    "***因此 票型(Pclass) 是一个十分重要的特征变量***"
   ],
   "id": "24c481230b75a581"
  },
  {
   "metadata": {},
   "cell_type": "markdown",
   "source": "**2. Sex**",
   "id": "a99204e63d98e6fa"
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-03-23T08:47:54.779684Z",
     "start_time": "2025-03-23T08:47:54.771404Z"
    }
   },
   "cell_type": "code",
   "source": [
    "sex = df1.groupby('Sex').agg({'Pclass': 'mean', 'Age': 'mean', 'Family': 'mean', 'Single_Fare': 'mean', 'Survived': 'sum', 'Sex': 'count'})\n",
    "sex['Survival_Rate'] = sex['Survived'] / sex['Sex']\n",
    "sex"
   ],
   "id": "b085eb374b8b39e3",
   "outputs": [
    {
     "data": {
      "text/plain": [
       "       Pclass        Age    Family  Single_Fare  Survived  Sex  Survival_Rate\n",
       "Sex                                                                          \n",
       "0    2.159236  27.675159  2.343949    25.507493       233  314       0.742038\n",
       "1    2.389948  30.830451  1.665511    16.873722       109  577       0.188908"
      ],
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Pclass</th>\n",
       "      <th>Age</th>\n",
       "      <th>Family</th>\n",
       "      <th>Single_Fare</th>\n",
       "      <th>Survived</th>\n",
       "      <th>Sex</th>\n",
       "      <th>Survival_Rate</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Sex</th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>2.159236</td>\n",
       "      <td>27.675159</td>\n",
       "      <td>2.343949</td>\n",
       "      <td>25.507493</td>\n",
       "      <td>233</td>\n",
       "      <td>314</td>\n",
       "      <td>0.742038</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>2.389948</td>\n",
       "      <td>30.830451</td>\n",
       "      <td>1.665511</td>\n",
       "      <td>16.873722</td>\n",
       "      <td>109</td>\n",
       "      <td>577</td>\n",
       "      <td>0.188908</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ]
     },
     "execution_count": 33,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "execution_count": 33
  },
  {
   "metadata": {},
   "cell_type": "markdown",
   "source": [
    "***性别呈现出了一定的区别***\n",
    "\n",
    "1. 女性票型与男性相比较好\n",
    "2. 女性年龄比男性年轻\n",
    "3. 但女性家庭人数比男性多\n",
    "4. 女性单人花费也比男性高\n",
    "5. **女性生存率是男性的 四倍**\n",
    "\n",
    "***仅根据最后一点便知性别也是一个十分重要的特征变量***"
   ],
   "id": "658d6d1c734e28a0"
  },
  {
   "metadata": {},
   "cell_type": "markdown",
   "source": [
    "**3. Age**\n",
    "\n",
    "年龄分布过于散乱，因此引入年龄区间"
   ],
   "id": "1a4974b1acd948d2"
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-03-23T08:50:44.915024Z",
     "start_time": "2025-03-23T08:50:44.902994Z"
    }
   },
   "cell_type": "code",
   "source": [
    "age_layer = df1[['Pclass', 'Family', 'Single_Fare', 'Survived', 'Age']].copy()\n",
    "bins = [0, 10, 20, 30, 40, 50, 100]\n",
    "age_layer['Age_Layer'] = pd.cut(age_layer['Age'], bins=bins)\n",
    "age_ = age_layer.groupby('Age_Layer', observed=False).agg({'Pclass': 'mean', 'Family': 'mean', 'Single_Fare': 'mean', 'Survived': 'sum', 'Age_Layer': 'count'})\n",
    "age_['Survival_Rate'] = age_['Survived'] / age_['Age_Layer']\n",
    "age_['Index'] = range(6)\n",
    "age_"
   ],
   "id": "37d230aa22107c59",
   "outputs": [
    {
     "data": {
      "text/plain": [
       "             Pclass    Family  Single_Fare  Survived  Age_Layer  \\\n",
       "Age_Layer                                                         \n",
       "(0, 10]    2.661765  4.338235     7.616859        40         68   \n",
       "(10, 20]   2.530435  1.982609    14.690822        44        115   \n",
       "(20, 30]   2.454887  1.691729    17.759815       106        266   \n",
       "(30, 40]   2.292096  1.611684    23.569192        97        291   \n",
       "(40, 50]   1.908046  1.793103    25.388484        33         87   \n",
       "(50, 100]  1.546875  1.546875    27.289931        22         64   \n",
       "\n",
       "           Survival_Rate  Index  \n",
       "Age_Layer                        \n",
       "(0, 10]         0.588235      0  \n",
       "(10, 20]        0.382609      1  \n",
       "(20, 30]        0.398496      2  \n",
       "(30, 40]        0.333333      3  \n",
       "(40, 50]        0.379310      4  \n",
       "(50, 100]       0.343750      5  "
      ],
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Pclass</th>\n",
       "      <th>Family</th>\n",
       "      <th>Single_Fare</th>\n",
       "      <th>Survived</th>\n",
       "      <th>Age_Layer</th>\n",
       "      <th>Survival_Rate</th>\n",
       "      <th>Index</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Age_Layer</th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>(0, 10]</th>\n",
       "      <td>2.661765</td>\n",
       "      <td>4.338235</td>\n",
       "      <td>7.616859</td>\n",
       "      <td>40</td>\n",
       "      <td>68</td>\n",
       "      <td>0.588235</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>(10, 20]</th>\n",
       "      <td>2.530435</td>\n",
       "      <td>1.982609</td>\n",
       "      <td>14.690822</td>\n",
       "      <td>44</td>\n",
       "      <td>115</td>\n",
       "      <td>0.382609</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>(20, 30]</th>\n",
       "      <td>2.454887</td>\n",
       "      <td>1.691729</td>\n",
       "      <td>17.759815</td>\n",
       "      <td>106</td>\n",
       "      <td>266</td>\n",
       "      <td>0.398496</td>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>(30, 40]</th>\n",
       "      <td>2.292096</td>\n",
       "      <td>1.611684</td>\n",
       "      <td>23.569192</td>\n",
       "      <td>97</td>\n",
       "      <td>291</td>\n",
       "      <td>0.333333</td>\n",
       "      <td>3</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>(40, 50]</th>\n",
       "      <td>1.908046</td>\n",
       "      <td>1.793103</td>\n",
       "      <td>25.388484</td>\n",
       "      <td>33</td>\n",
       "      <td>87</td>\n",
       "      <td>0.379310</td>\n",
       "      <td>4</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>(50, 100]</th>\n",
       "      <td>1.546875</td>\n",
       "      <td>1.546875</td>\n",
       "      <td>27.289931</td>\n",
       "      <td>22</td>\n",
       "      <td>64</td>\n",
       "      <td>0.343750</td>\n",
       "      <td>5</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ]
     },
     "execution_count": 37,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "execution_count": 37
  },
  {
   "metadata": {},
   "cell_type": "markdown",
   "source": "通过折线图，我们可以清晰地看出年龄的规律。",
   "id": "68dc0dc2782626bf"
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-03-23T08:51:03.563669Z",
     "start_time": "2025-03-23T08:51:03.503804Z"
    }
   },
   "cell_type": "code",
   "source": [
    "plt.plot(age_['Index'], age_['Pclass'], 'b-')\n",
    "plt.xlabel('Age')\n",
    "plt.xticks(range(6), labels=['(0, 10]', '(10, 20]', '(20, 30]', '(30, 40]', '(40, 50]', '(50, 100]'])\n",
    "plt.ylabel('Pclass')"
   ],
   "id": "b2fa424a13555185",
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Text(0, 0.5, 'Pclass')"
      ]
     },
     "execution_count": 38,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ],
      "image/png": "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oH5CIiLiPWwNQFFRUUybNo0ZM2YQHBxMQkICCQkJnD171nlMly5diI6Odn79/PPPc+LECfr168euXbv47rvvGD58OFFRUXZ8C14lIACefhp++w2WLzfrjDkcsGQJ3H8/1K5tRpOdOWN3pSIiIrljax8gh8OR6f4pU6bQtWtXAJo3b06lSpWYOnWq8/64uDgGDBjApk2bKF++PN27d2fQoEEZLotdja8Ng8+tPXvg44/NpbL0+YNKloTnnoPevU2fIRERkbzm6s9vt+kEnV8UgHImMdHMLP3RR7B/v9lXoAB06gT9+8Ptt9tZnYiIeDuv7AQt7i80FAYMgN274euvoUkTuHDBjCBr0ADuvtvsv3DB7kpFRESuTwFIssXfHx55BFauhA0boHNnswTHmjXw6KNQtSq8//6lWadFRETckQKQ5Fj9+vDll+aS2BtvmL5BBw7ASy9BhQrQt685YyQiIuJuFIAk18qVg7ffhkOHYOJEuPlm02H644+henVo1w6WLdMwehERcR8KQOIygYHQowds3Qo//ggPPGBCz8KFZumNevXMPEPnztldqYiI+DoFIHE5hwPuvRe++87MJP3881CkCGzeDM88YxZoffNNOHrU7kpFRMRXKQBJnqpZE8aNM5fHRowwfYP+/tssvVGxoglEmzfbXaWIiPgaBSDJFyVKwKBBsHevWXW+YUM4f/7S0hv33GMulV28aHelIiLiCxSAJF8VLAiPPw7r1kFcnJlI0d/fdJJu1w5q1DCdp0+dsrtSERHxZgpAYps774SZM81ZoVdegWLFzNIbffua1ehfeunSrNMiIiKupAAktqtYEd591/QTGjvWDJ1PTDQTKlapYiZYXLNGw+hFRMR1FIDEbQQFmQVW//gDFi2CVq0gLc0ssXH33abf0PTppu+QiIhIbigAidvx84MHH4TYWNiyBbp3h4CAS0tvVK4MQ4eas0IKQyIikhNaDV48wrFj8Mkn5hJZQsKl/UWKQOPG0KKFudWvbzpai4iId3H157cCkHiUlBSYMwe++QaWL4f//S/j/UFB5nJZixbQvDncdhsUKGBHpSIi4koKQLmkAOQ90tLg999NEFq2DFasgBMnMh4THAxNmlw6Q3TrrWbYvYiIeBYFoFxSAPJeaWlmHbJly0woWrECTp7MeExoKDRteukMUd26ps+RiIi4NwWgXFIA8h0X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cvvtMHWq2X7/fZgyxdZyskUBSERERHKsUycYPNhsP/ccrFljbz1ZpQAkIiIiufLmm/DII2aG6IcfhgMH7K7o+hSAREREJFf8/OCLL+DWW+HYMXjoIbhs2U63pAAkIiIiuVa0qOkUXaaMuV24YHdF11bA7gJERETEO1SsCKtXQ6VKUMDNE4ablyciIiKepGpVuyvIGl0CExEREZ+jACQiIiI+RwFIREREfI4CkIiIiPgcBSARERHxOQpAIiIi4nMUgERERMTnKACJiIiIz1EAEhEREZ+jACQiIiI+RwFIREREfI4CkIiIiPgcBSARERHxOT63GrxlWQAkJSXZXImIiIhkVfrndvrneG75XAA6deoUABERETZXIiIiItl16tQpQkNDc/08DstVUcpDpKWlceTIEYKDg3E4HC597qSkJCIiIjh06BAhISEufW65RO2cP9TO+UPtnH/U1vkjr9rZsixOnTpFuXLl8PPLfQ8enzsD5OfnR4UKFfL0NUJCQvTLlQ/UzvlD7Zw/1M75R22dP/KinV1x5iedOkGLiIiIz1EAEhEREZ+jAORCAQEBDB06lICAALtL8Wpq5/yhds4fauf8o7bOH57Szj7XCVpEREREZ4BERETE5ygAiYiIiM9RABIRERGf49MB6Pjx44SFhbF//367S8mUw+HA4XBQrFgxu0vJFndv1+tZvny5s+3bt29vdzlX5entPHXqVGc79+/f3+5yrkrtnD/UznnD09s1K958801n2//nP//J8uN8OgANGzaMdu3aUalSJee+gwcP8uCDD1KkSBHCwsJ4+eWXuXDhQraed+XKlbRt25Zy5crhcDhYsGDBFcdYlsWQIUMIDw8nMDCQVq1a8eeff2Y4Jj4+Plv/me4is3bt27cv9evXJyAggFtvvTXTx23ZsoUmTZpQuHBhIiIiGDlyZLZeNzU1lUGDBnHLLbdQtGhRypUrR5cuXThy5EiG406cOMGTTz5JSEgIxYoVo3v37pw+fdp5/1133UV8fDwdO3bM1uvnt3+38+bNm4mMjCQiIoLAwEBq1arFhx9+eMXjli9fzm233UZAQABVq1Zl6tSp2X7t5557jipVqhAYGEjp0qVp164dO3bsyHDM9X6XOnXqRHx8PI0aNcr26+enf7fz8ePHuf/++ylXrhwBAQFERETQp0+fK9YXdEU7p7MsizZt2mT6fuKt7Xy548ePU6FCBRwOBydPnsxwnyvauXnz5s4P0PRbr169Mhzjqe2cWbv++3t1OBzMnDkzw+Nc0a6ffvopzZs3JyQkJNP/O7j++zFc/7PhpZdeIj4+PvuTHFs+Kjk52QoJCbHi4uKc+y5cuGDVrl3batWqlbVx40Zr8eLFVqlSpazo6OhsPffixYut119/3Zo3b54FWPPnz7/imBEjRlihoaHWggULrM2bN1sPPfSQVblyZevs2bMZjpsyZYoVGhqak2/RFpm1q2VZ1gsvvGCNGTPGeuqpp6y6dete8bjExESrTJky1pNPPmlt27bN+uqrr6zAwEDrk08+yfJrnzx50mrVqpU1a9Ysa8eOHVZcXJzVsGFDq379+hmOu//++626detaa9eutVatWmVVrVrVioyMvOL5nn76aatdu3ZZfv38lFk7T5o0yerbt6+1fPlya8+ePdaXX35pBQYGWh9//LHzmL1791pFihSxBg4caG3fvt36+OOPLX9/f2vJkiXZev1PPvnEWrFihbVv3z7r119/tdq2bWtFRERYFy5csCwre79LzZo1s/r165ezhshjmbXziRMnrHHjxlm//PKLtX//fuu///2vVaNGjQw/Q65q53QffPCB1aZNmyveT7y5nS/Xrl075/f/zz//OPe7qp2bNWtmPfvss1Z8fLzzlpiY6LzfU9v5au0KWFOmTMnw/V7+2eOqdh09erQVExNjxcTEXPF/l+5678fZ+Wy44YYbrNGjR2e5Pp8NQHPmzLFKly6dYd/ixYstPz8/KyEhwblv/PjxVkhIiJWSkpKj18ksAKWlpVlly5a1Ro0a5dx38uRJKyAgwPrqq68yHOtpASizdr3c0KFDMw1A48aNs4oXL56hnQcNGmTVqFEjV/WsX7/eAqwDBw5YlmVZ27dvtwDrl19+cR7z/fffWw6Hw/rrr78yPNadA9D12jld7969rRYtWji/fuWVV6ybb745wzGdOnWy7rvvvlzVs3nzZguwdu/ebVlW9n6X3OkD49+y2s4ffvihVaFCBefXrmznjRs3WuXLl7fi4+OveD/xhXYeN26c1axZM+unn3664kPUVe18vbbx1Ha+Wrte7Q/zdK5+n1i2bFmmASgr78fZ+WzIbgDy2Utgq1aton79+hn2xcXFccstt1CmTBnnvvvuu4+kpCR+//13l732vn37SEhIoFWrVs59oaGh3HHHHcTFxbnsdeyQWbtmRVxcHE2bNqVQoULOfffddx87d+7kn3/+yXE9iYmJGfpRxcXFUaxYMW6//XbnMa1atcLPz49169bl+HXyW1bbOTExkRIlSji/jouLy/BzB6adc/Nzl5yczJQpU6hcuTIRERHO18mP36W8lpV2PnLkCPPmzaNZs2bOfa5q5zNnzvDEE08wduxYypYte8X93t7O27dv56233uKLL77IdPFLV/48T58+nVKlSlG7dm2io6M5c+ZMhtfxxHa+1s9vVFQUpUqVomHDhkyePBnrsikB8+J9IjNZeT/Oq88G8OE+QAcOHKBcuXIZ9iUkJGT4AQecXyckJLjstdOfK7PXcuXr2CGzds2KvGj7c+fOMWjQICIjI50L8iUkJBAWFpbhuAIFClCiRAmPavustPPPP//MrFmz6Nmzp3Pf1do5KSmJs2fPZquGcePGERQURFBQEN9//z2xsbHON6n8+l3Ka9dq58jISIoUKUL58uUJCQnhs88+c97nqnYeMGAAd911F+3atcv0fm9u55SUFCIjIxk1ahQVK1bM9HGuaucnnniCadOmsWzZMqKjo/nyyy/p3LnzdV8n/T53dbWf37feeovZs2cTGxtLhw4d6N27Nx9//LHzfle+T1xLVt6P87LtfW41+HRnz56lcOHCdpfhddylXVNTU+nYsSOWZTF+/Hi7y3G567Xztm3baNeuHUOHDqV169Z5UsOTTz7JvffeS3x8PO+99x4dO3ZkzZo1bvH/7yrXaufRo0czdOhQdu3aRXR0NAMHDmTcuHEue+2FCxeydOlSNm7c6LLndFeZtXN0dDS1atXKEETyyuV/JNxyyy2Eh4fTsmVL9uzZQ5UqVfL89fPK1X5+Bw8e7NyuV68eycnJjBo1ir59++Znebbz2TNApUqVuuL0WdmyZTl69GiGfelfZ3b6OafSnyuz13Ll69ghs3bNCle2fXr4OXDgALGxsc6zP+nP9ffff2c4/sKFC5w4ccKj2v5a7bx9+3ZatmxJz549eeONNzLcd7V2DgkJITAwMFs1hIaGUq1aNZo2bcrcuXPZsWMH8+fPv+brpN/nKa7VzmXLlqVmzZo89NBDfPLJJ4wfP574+Hjnfblt56VLl7Jnzx6KFStGgQIFKFDA/L3aoUMHmjdvfs3XSb/PU2TWzkuXLmXOnDnO771ly5bOY4cOHQq49uf5cnfccQcAu3fvvubrpN/nrrL6fnzHHXdw+PBhUlJSgLxr13/LyvtxXra9zwagevXqsX379gz7GjVqxNatWzP8h6R/gN50000ue+3KlStTtmxZfvrpJ+e+pKQk1q1b53ZDKLMrs3bNikaNGrFy5UpSU1Od+2JjY6lRowbFixfP8vOkh58///yT//73v5QsWfKK1zl58iS//vqrc9/SpUtJS0tzvul5gqu18++//06LFi14+umnGTZs2BX3N2rUKMPPHZh2zu3PnWUGVDjfQPPrdymvZfXnOS0tDSDD95/bdn711VfZsmULmzZtct7AnHmaMmWK83W8tZ2//vprNm/e7Pze0y8xrlq1iqioKCDvfp7T2zo8PNz5Op7Yzln9+d20aRPFixd3Ll6aV+36b1l5P3bVZ0Omst6P27ts2bLFKlCggHXixAnnvvShjq1bt7Y2bdpkLVmyxCpdunS2h8GfOnXK2rhxo7Vx40YLsD744ANr48aNzpFIlmWGwRcrVsz65ptvrC1btljt2rXzimHwmbWrZVnWn3/+aW3cuNF67rnnrOrVqzvbJ71n/8mTJ60yZcpYTz31lLVt2zZr5syZVpEiRbI1DP78+fPWQw89ZFWoUMHatGlThiGel48guP/++6169epZ69ats1avXm1Vq1bN44bBZ9bOW7dutUqXLm117tw5w/f+999/O49JH9768ssvW3/88Yc1duzYbA9v3bNnjzV8+HBrw4YN1oEDB6w1a9ZYbdu2tUqUKGEdPXrUsqzs/S6506iZf8usnb/77jtr8uTJ1tatW619+/ZZixYtsmrVqmU1btzYeYwr2jkzXGUYvDe2879lNpLIFe28e/du66233rI2bNhg7du3z/rmm2+sG2+80WratKnzGE9t58zadeHChdbEiROtrVu3Wn/++ac1btw4q0iRItaQIUOcx7jq5zc+Pt7auHGjNXHiRAuwVq5caW3cuNE6fvy485jrvR9n57NBw+CzoWHDhtaECRMy7Nu/f7/Vpk0bKzAw0CpVqpT14osvWqmpqc779+3bZwHWsmXLrvq86b+o/749/fTTzmPS0tKswYMHW2XKlLECAgKsli1bWjt37rziuTwtAFlW5u3arFmzTNtk3759zmM2b95s3X333VZAQIBVvnx5a8SIERmeI71dL3/M5dL/bzK7Xf7/dfz4cSsyMtIKCgqyQkJCrGeeecY6derUFc/nzgHIsq5s56FDh2b6vd9www0ZHrds2TLr1ltvtQoVKmTdeOON1pQpUzLcP2XKFOtafxv99ddfVps2baywsDCrYMGCVoUKFawnnnjC2rFjR4bjrve7lM6dPjAy8+92Xrp0qdWoUSMrNDTUKly4sFWtWjVr0KBBVwzxzW07Z+bfAciyvLed/+1qQ6lz284HDx60mjZtapUoUcIKCAiwqlatar388ssZ5gGyLM9t53+36/fff2/deuutVlBQkFW0aFGrbt261oQJE6yLFy9meJwrfn6v9p50+XNl5f34ep8N6RSAsiH9L7d//8dfy9KlS61ixYpd8y8VV/LEAJSTds2KyZMnW1WrVrXOnz/v0ue9GncPQHnVzkOGDLGaNWvm0ue8Fnf7wPg3tXP+UDvnDW9p16zQPEDZ8OCDD9KzZ0/++uuvLD9m8eLFvPbaa7m/9pgFQUFBV0zH7gly0q5ZsXjxYoYPH07BggVd+rz/tmrVKoKCgpg+fXqevk5u5VU7f//999lehiQnpk+fTlBQEKtWrcrz18oNtXP+UDvnDU9v16wYPnw4QUFBHDx4MFuPc1jWZbMfiVtJH4Hg7+9P5cqVba7Gd5w9e9b5ZhEUFOTWozw82alTp5yjOYoVK0apUqVsrsg7qZ3zh9rZPidOnODEiRMAlC5dmtDQ0Cw9TgFIREREfI5PXwITERER36QAJCIiIj5HAUhERER8jgKQiIiI+BwFIBEREfE5CkAiIiLicxSARMQjxMXF4e/vz4MPPmh3KSLiBTQPkIh4hB49ehAUFMSkSZPYuXMn5cqVs7skEfFgOgMkIm7v9OnTzJo1i+eff54HH3yQqVOnZrh/4cKFVKtWjcKFC9OiRQs+//xzHA4HJ0+edB6zevVqmjRpQmBgIBEREfTt25fk5OT8/UZExG0oAImI25s9ezY1a9akRo0adO7cmcmTJ5N+8nrfvn08+uijtG/fns2bN/Pcc8/x+uuvZ3j8nj17uP/+++nQoQNbtmxh1qxZrF69mj59+tjx7YiIG9AlMBFxe40bN6Zjx47069ePCxcuEB4ezpw5c2jevDmvvvoq3333HVu3bnUe/8YbbzBs2DD++ecfihUrRo8ePfD39+eTTz5xHrN69WqaNWtGcnIyhQsXtuPbEhEb6QyQiLi1nTt3sn79eiIjIwEoUKAAnTp1YtKkSc77GzRokOExDRs2zPD15s2bmTp1KkFBQc7bfffdR1paGvv27cufb0RE3EoBuwsQEbmWSZMmceHChQydni3LIiAggDFjxmTpOU6fPs1zzz1H3759r7ivYsWKLqtVRDyHApCIuK0LFy7wxRdf8P7779O6desM97Vv356vvvqKGjVqsHjx4gz3/fLLLxm+vu2229i+fTtVq1bN85pFxDOoD5CIuK0FCxbQqVMn/v77b0JDQzPcN2jQIJYuXcrs2bOpUaMGAwYMoHv37mzatIkXX3yRw4cPc/LkSUJDQ9myZQt33nkn3bp1o0ePHhQtWpTt27cTGxub5bNIIuJd1AdIRNzWpEmTaNWq1RXhB6BDhw5s2LCBU6dOMXfuXObNm0edOnUYP368cxRYQEAAAHXq1GHFihXs2rWLJk2aUK9ePYYMGaK5hER8mM4AiYjXGTZsGBMmTODQoUN2lyIibkp9gETE440bN44GDRpQsmRJ1qxZw6hRozTHj4hckwKQiHi8P//8k3feeYcTJ05QsWJFXnzxRaKjo+0uS0TcmC6BiYiIiM9RJ2gRERHxOQpAIiIi4nMUgERERMTnKACJiIiIz1EAEhEREZ+jACQiIiI+RwFIREREfI4CkIiIiPic/x/tgkHkU1590wAAAABJRU5ErkJggg=="
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "execution_count": 38
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-03-23T08:51:15.766910Z",
     "start_time": "2025-03-23T08:51:15.709303Z"
    }
   },
   "cell_type": "code",
   "source": [
    "plt.plot(age_['Index'], age_['Family'], 'g-')\n",
    "plt.xlabel('Age')\n",
    "plt.xticks(range(6), labels=['(0, 10]', '(10, 20]', '(20, 30]', '(30, 40]', '(40, 50]', '(50, 100]'])\n",
    "plt.ylabel('Family')"
   ],
   "id": "e71ed5b14c5a2129",
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Text(0, 0.5, 'Family')"
      ]
     },
     "execution_count": 39,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ],
      "image/png": "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Y/LkyTh//rxWm5KSki79YZqKtvr1ueeew4gRI+Do6Ihhw4a1+bzTp09j7NixcHJyQlBQEP7xj3906biNjY149dVXMXjwYLi4uMDf3x9LlizB1atXtdpVVFRg0aJFkMvlcHd3R1xcHKqrqzX7R48ejZKSEjz22GNdOr6x3d3Pp06dwsKFCxEUFARnZ2eEh4fjo48+avW8ffv2Yfjw4XB0dMSAAQOwbt26Lh/7qaeeQv/+/eHs7AwvLy9ER0cjNzdXq829/i4tWLAAJSUliIqK6vLxjenufr5x4wamT58Of39/ODo6IigoCMuXL291f0F99LOaEAIzZsxo8/PEUvv5Tjdu3EBgYCBkMhlu3bqltU8f/TxhwgTNF6j68fTTT2u1Mdd+bqtf736vMpkMGzZs0HqePvr13//+NyZMmAC5XN7mnx1w789j4N7fDf/v//0/lJSUdH2RY2GlampqhFwuF+np6ZptTU1NYtCgQWLy5MkiIyNDpKamCk9PTxEfH9+l105NTRV//vOfRVJSkgAgkpOTW7V59913hUKhECkpKeLUqVNi7ty5om/fvqK2tlar3dq1a4VCoejOW5REW/0qhBC///3vxaeffip+9atfiaFDh7Z6XmVlpfDx8RGLFi0SZ86cEd9++61wdnYWX3zxRaePfevWLTF58mTx3XffidzcXJGeni5GjhwpRowYodVu+vTpYujQoeLo0aPi4MGDYsCAAWLhwoWtXm/p0qUiOjq608c3prb6efXq1eK5554T+/btExcuXBBfffWVcHZ2Fp988ommzcWLF0WPHj3ESy+9JLKzs8Unn3wibG1txfbt27t0/C+++ELs379fFBQUiBMnTog5c+aIoKAg0dTUJITo2t+l8ePHi+eff757HWFgbfVzRUWFWLlypfj555/FpUuXxO7du0VoaKjW75C++lntX//6l5gxY0arzxNL7uc7RUdHa97/zZs3Ndv11c/jx48Xv/3tb0VJSYnmUVlZqdlvrv3cXr8CEGvXrtV6v3d+9+irXz/44AOxYsUKsWLFilZ/dmr3+jzuyndDcHCw+OCDDzpdn9UGoI0bNwovLy+tbampqcLGxkaUlpZqtq1atUrI5XJRX1/freO0FYBUKpXw9fUV7733nmbbrVu3hKOjo/j222+12ppbAGqrX+/0xhtvtBmAVq5cKXr27KnVz6+++qoI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hIaGYvHixVizZg3UJ68LCgoQGxuLmJgYnDp1Ck899RT+/Oc/az3/woULmD59OubPn4/Tp0/ju+++w6FDh7B8+XIp3g4RmQBeAiMik/fQQw/hsccew/PPP4+mpib4+flh48aNmDBhAv74xz9i69atyMrK0rR/7bXX8Pbbb+PmzZtwd3fHsmXLYGtriy+++ELT5tChQxg/fjxqamrg5OQkxdsiIgnxDBARmbS8vDz89NNPWLhwIQDAzs4OCxYswOrVqzX7H3jgAa3njBw5UuvnU6dOYd26dXB1ddU8pk2bBpVKhYKCAuO8ESIyKXZSF0BE1JHVq1ejqalJa9CzEAKOjo749NNPO/Ua1dXVeOqpp/Dcc8+12te7d2+91UpE5oMBiIhMVlNTE7788ku8//77mDp1qta+mJgYfPvttwgNDUVqaqrWvp9//lnr5+HDhyM7OxsDBgwweM1EZB44BoiITFZKSgoWLFiA8vJyKBQKrX2vvvoq0tLS8P333yM0NBQvvvgi4uLikJmZiZdffhlXrlzBrVu3oFAocPr0aTz44IN44oknsGzZMri4uCA7Oxu7du3q9FkkIrIsHANERCZr9erVmDx5cqvwAwDz58/H8ePHUVVVhcTERCQlJWHIkCFYtWqVZhaYo6MjAGDIkCHYv38/zp07h7FjxyIyMhKvv/461xIismI8A0REFuftt9/G559/jsuXL0tdChGZKI4BIiKzt3LlSjzwwAPo1asXDh8+jPfee49r/BBRhxiAiMjsnT9/Hn//+99RUVGB3r174+WXX0Z8fLzUZRGRCeMlMCIiIrI6HARNREREVocBiIiIiKwOAxARERFZHQYgIiIisjoMQERERGR1GICIiIjI6jAAERERkdVhACIiIiKr8/8Bz2UKf/K60VgAAAAASUVORK5CYII="
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "execution_count": 39
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-03-23T08:51:31.329311Z",
     "start_time": "2025-03-23T08:51:31.265158Z"
    }
   },
   "cell_type": "code",
   "source": [
    "plt.plot(age_['Index'], age_['Single_Fare'], 'r-')\n",
    "plt.xlabel('Age')\n",
    "plt.xticks(range(6), labels=['(0, 10]', '(10, 20]', '(20, 30]', '(30, 40]', '(40, 50]', '(50, 100]'])\n",
    "plt.ylabel('Single_Fare')"
   ],
   "id": "31c188660bf01471",
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Text(0, 0.5, 'Single_Fare')"
      ]
     },
     "execution_count": 42,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ],
      "image/png": "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"
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "execution_count": 42
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-03-23T08:51:32.120751Z",
     "start_time": "2025-03-23T08:51:32.062021Z"
    }
   },
   "cell_type": "code",
   "source": [
    "plt.plot(age_['Index'], age_['Survival_Rate'], 'y-')\n",
    "plt.xlabel('Age')\n",
    "plt.xticks(range(6), labels=['(0, 10]', '(10, 20]', '(20, 30]', '(30, 40]', '(40, 50]', '(50, 100]'])\n",
    "plt.ylabel('Survival_Rate')"
   ],
   "id": "14d009c0791c002b",
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Text(0, 0.5, 'Survival_Rate')"
      ]
     },
     "execution_count": 43,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ],
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAkkAAAG1CAYAAADtOGDLAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8hTgPZAAAACXBIWXMAAA9hAAAPYQGoP6dpAABWXUlEQVR4nO3deVhU9f4H8PfMADNsM4DsiAKKqKngilqpXUm0TVu9pmnctmt7tHozuWlly81WTa9lavUztdvVbpllmOaCS4qAIqhsIvsiDItsM+f3BzI6MijLzJxZ3q/nmeeJM+ec+cxXmHl3Pud7jkQQBAFEREREpEcqdgFEREREloghiYiIiMgAhiQiIiIiAxiSiIiIiAxgSCIiIiIygCGJiIiIyACGJCIiIiIDGJKIiIiIDGBIIiIiIjKAIYmIiIjIAIsIScuXL0dISAgUCgWio6Nx6NChq65fVVWFJ554AgEBAZDL5RgwYAC2bdvWo30SERERXU70kLRx40bEx8cjISEBR48eRWRkJGJjY1FaWmpw/aamJtx8883Izc3Fd999h8zMTKxevRpBQUHd3icRERHRlSRi3+A2Ojoao0ePxqeffgoA0Gq1CA4OxlNPPYVXXnml3forV67Ee++9h4yMDDg6Ohpln1fSarUoLCyEu7s7JBJJD94dERERmYsgCKipqUFgYCCk0p4fBxI1JDU1NcHFxQXfffcdZsyYoVs+b948VFVVYevWre22ueWWW+Dl5QUXFxds3boVPj4+uP/++/Hyyy9DJpN1a5+NjY1obGzU/VxQUIDBgwcb9b0SERGReeTn56N379493o+DEWrptvLycmg0Gvj5+ekt9/PzQ0ZGhsFtsrOzsXPnTsyePRvbtm3DmTNn8Pjjj6O5uRkJCQnd2ufSpUvx+uuvt1uen58PpVLZzXdHRERE5qRWqxEcHAx3d3ej7E/UkNQdWq0Wvr6++Pe//w2ZTIaRI0eioKAA7733HhISErq1zwULFiA+Pl73c9sgK5VKhiQiIiIrY6xTZUQNSd7e3pDJZCgpKdFbXlJSAn9/f4PbBAQEwNHRETKZTLds0KBBKC4uRlNTU7f2KZfLIZfLe/huiIiIyJaIOrvNyckJI0eORGJiom6ZVqtFYmIixo0bZ3Cb66+/HmfOnIFWq9UtO3XqFAICAuDk5NStfRIRERFdSfRLAMTHx2P16tVYt24dTp48ifnz56Ourg5xcXEAgLlz52LBggW69efPn4/Kyko888wzOHXqFH766Se89dZbeOKJJzq9TyIiIqJrEf2cpJkzZ6KsrAyLFi1CcXExoqKisH37dt2J12fPntWbxhccHIxffvkFzz33HIYNG4agoCA888wzePnllzu9TyIiIqJrEf06SZZIrVZDpVKhurqaJ24TERFZCWN/f4vebiMiIiKyRAxJRERERAYwJBEREREZwJBEREREZABDEhEREZEBDElEREREBjAkERERERnAkGRmDQ35qK/PFLsMIiIiugaGJDMqKFiOAwf6IDv7VbFLISIiomtgSDIjpXI8AKCychs0mjqRqyEiIqKrYUgyIze3KCgU/aDVXkBFxU9il0NERERXwZBkRhKJBL6+9wIASks3iVwNERERXQ1Dkpn5+LSGJLbciIiILBtDkpm5uQ2HQhHGlhsREZGFY0gyM4lEojuaVFa2WeRqiIiIqCMMSSLw9b0PAFBR8RNbbkRERBaKIUkEbLkRERFZPoYkEbDlRkREZPkYkkTSdikAttyIiIgsE0OSSNzcRkChCL3YctsmdjlERER0BYYkkbDlRkREZNkYkkTEWW5ERESWiyFJRJdabvVsuREREVkYhiQRseVGRERkuRiSRNYWklpbbvUiV0NERERtGJJE5u4+EgpFCFtuREREFoYhSWRsuREREVkmhiQL4OPTNsvtR7bciIiILARDkgVgy42IiMjyMCRZALbciIiILA9DkoW4NMuNLTciIiJLwJBkIdzdR+labpWVP4tdDhERkd1jSLIQl7fcSkvZciMiIhIbQ5IFYcuNiIjIcjAkWZBLLbc6ttyIiIhExpBkQVpbbvcAYMuNiIhIbAxJFka/5XZB5GqIiIjsF0OShXF3Hw25vC9bbkRERCJjSLIwEokEvr68sCQREZHYGJIsUFvLrbz8f2y5ERERiYQhyQKx5UZERCQ+hiQLdPksN7bciIiIxMGQZKHazktiy42IiEgcDEkWyt19DOTyPhdbbtvFLoeIiMjuMCRZqMvv5caWGxERkfkxJFmwSy23H9hyIyIiMjOGJAvGlhsREZF4GJIsGGe5ERERiYchycJdupcbZ7kRERGZE0OShVMqoyGXB0OjqUVl5S9il0NERGQ3GJIsHGe5ERERiYMhyQpcarlxlhsREZG5MCRZAbbc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"
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "execution_count": 43
  },
  {
   "metadata": {},
   "cell_type": "markdown",
   "source": [
    "通过这四幅折线图，我们可以发现：\n",
    "\n",
    "随着年龄的增大：\n",
    "1. 票型越来越好\n",
    "2. 家庭人数逐渐减少\n",
    "3. 票价逐步上升\n",
    "4. 生存率在(0, 10]时比较高，其他年龄段均相对较低\n",
    "\n",
    "***因此年龄也是预测生存的重要特征之一***"
   ],
   "id": "b2552956bf8d2b08"
  },
  {
   "metadata": {},
   "cell_type": "markdown",
   "source": "## 三、初步构建模型",
   "id": "b21ffe94878b806c"
  },
  {
   "metadata": {},
   "cell_type": "markdown",
   "source": "### 洗牌",
   "id": "5d2171c97e7c4dd3"
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-03-23T08:52:56.931767Z",
     "start_time": "2025-03-23T08:52:56.919995Z"
    }
   },
   "cell_type": "code",
   "source": [
    "data_shuffle = df1.sample(frac=1).reset_index(drop=True)\n",
    "data_shuffle"
   ],
   "id": "68a6f888f7fae9fa",
   "outputs": [
    {
     "data": {
      "text/plain": [
       "     Survived  Pclass  Sex   Age  Ticket     Fare Embarked  Family  \\\n",
       "0           1       3    1   1.0    2315  20.5750        S       4   \n",
       "1           0       1    1  47.0  111320  38.5000        S       1   \n",
       "2           0       3    0  31.0  345763  18.0000        S       2   \n",
       "3           0       1    1  31.0   17590  50.4958        S       1   \n",
       "4           0       3    0   9.0  347088  27.9000        S       6   \n",
       "..        ...     ...  ...   ...     ...      ...      ...     ...   \n",
       "886         0       3    1  33.0    7540   8.6542        S       1   \n",
       "887         0       2    1  54.0  244252  26.0000        S       2   \n",
       "888         0       3    1  24.0   48871  24.1500        S       3   \n",
       "889         0       3    0  21.0  364846   7.7500        Q       1   \n",
       "890         0       3    1  25.0  374887   7.2500        S       1   \n",
       "\n",
       "     Single_Fare  \n",
       "0        5.14375  \n",
       "1       38.50000  \n",
       "2        9.00000  \n",
       "3       50.49580  \n",
       "4        4.65000  \n",
       "..           ...  \n",
       "886      8.65420  \n",
       "887     13.00000  \n",
       "888      8.05000  \n",
       "889      7.75000  \n",
       "890      7.25000  \n",
       "\n",
       "[891 rows x 9 columns]"
      ],
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Survived</th>\n",
       "      <th>Pclass</th>\n",
       "      <th>Sex</th>\n",
       "      <th>Age</th>\n",
       "      <th>Ticket</th>\n",
       "      <th>Fare</th>\n",
       "      <th>Embarked</th>\n",
       "      <th>Family</th>\n",
       "      <th>Single_Fare</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>1</td>\n",
       "      <td>3</td>\n",
       "      <td>1</td>\n",
       "      <td>1.0</td>\n",
       "      <td>2315</td>\n",
       "      <td>20.5750</td>\n",
       "      <td>S</td>\n",
       "      <td>4</td>\n",
       "      <td>5.14375</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>47.0</td>\n",
       "      <td>111320</td>\n",
       "      <td>38.5000</td>\n",
       "      <td>S</td>\n",
       "      <td>1</td>\n",
       "      <td>38.50000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>0</td>\n",
       "      <td>3</td>\n",
       "      <td>0</td>\n",
       "      <td>31.0</td>\n",
       "      <td>345763</td>\n",
       "      <td>18.0000</td>\n",
       "      <td>S</td>\n",
       "      <td>2</td>\n",
       "      <td>9.00000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>31.0</td>\n",
       "      <td>17590</td>\n",
       "      <td>50.4958</td>\n",
       "      <td>S</td>\n",
       "      <td>1</td>\n",
       "      <td>50.49580</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>0</td>\n",
       "      <td>3</td>\n",
       "      <td>0</td>\n",
       "      <td>9.0</td>\n",
       "      <td>347088</td>\n",
       "      <td>27.9000</td>\n",
       "      <td>S</td>\n",
       "      <td>6</td>\n",
       "      <td>4.65000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>...</th>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>886</th>\n",
       "      <td>0</td>\n",
       "      <td>3</td>\n",
       "      <td>1</td>\n",
       "      <td>33.0</td>\n",
       "      <td>7540</td>\n",
       "      <td>8.6542</td>\n",
       "      <td>S</td>\n",
       "      <td>1</td>\n",
       "      <td>8.65420</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>887</th>\n",
       "      <td>0</td>\n",
       "      <td>2</td>\n",
       "      <td>1</td>\n",
       "      <td>54.0</td>\n",
       "      <td>244252</td>\n",
       "      <td>26.0000</td>\n",
       "      <td>S</td>\n",
       "      <td>2</td>\n",
       "      <td>13.00000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>888</th>\n",
       "      <td>0</td>\n",
       "      <td>3</td>\n",
       "      <td>1</td>\n",
       "      <td>24.0</td>\n",
       "      <td>48871</td>\n",
       "      <td>24.1500</td>\n",
       "      <td>S</td>\n",
       "      <td>3</td>\n",
       "      <td>8.05000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>889</th>\n",
       "      <td>0</td>\n",
       "      <td>3</td>\n",
       "      <td>0</td>\n",
       "      <td>21.0</td>\n",
       "      <td>364846</td>\n",
       "      <td>7.7500</td>\n",
       "      <td>Q</td>\n",
       "      <td>1</td>\n",
       "      <td>7.75000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>890</th>\n",
       "      <td>0</td>\n",
       "      <td>3</td>\n",
       "      <td>1</td>\n",
       "      <td>25.0</td>\n",
       "      <td>374887</td>\n",
       "      <td>7.2500</td>\n",
       "      <td>S</td>\n",
       "      <td>1</td>\n",
       "      <td>7.25000</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>891 rows × 9 columns</p>\n",
       "</div>"
      ]
     },
     "execution_count": 60,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "execution_count": 60
  },
  {
   "metadata": {},
   "cell_type": "markdown",
   "source": [
    "### 取出所需数据\n",
    "\n",
    "Survived | Pclass、Sex、Age、Family、Single_Fare"
   ],
   "id": "e7e2ff4cbfae2d3f"
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-03-23T08:52:57.892165Z",
     "start_time": "2025-03-23T08:52:57.887661Z"
    }
   },
   "cell_type": "code",
   "source": [
    "X_train1 = data_shuffle[['Pclass', 'Sex', 'Age', 'Family', 'Single_Fare']]\n",
    "y_train1 = data_shuffle['Survived']"
   ],
   "id": "f9a73e57c59ef721",
   "outputs": [],
   "execution_count": 61
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-03-23T08:52:58.068882Z",
     "start_time": "2025-03-23T08:52:58.061706Z"
    }
   },
   "cell_type": "code",
   "source": "X_train1",
   "id": "70fd11b77bf115be",
   "outputs": [
    {
     "data": {
      "text/plain": [
       "     Pclass  Sex   Age  Family  Single_Fare\n",
       "0         3    1   1.0       4      5.14375\n",
       "1         1    1  47.0       1     38.50000\n",
       "2         3    0  31.0       2      9.00000\n",
       "3         1    1  31.0       1     50.49580\n",
       "4         3    0   9.0       6      4.65000\n",
       "..      ...  ...   ...     ...          ...\n",
       "886       3    1  33.0       1      8.65420\n",
       "887       2    1  54.0       2     13.00000\n",
       "888       3    1  24.0       3      8.05000\n",
       "889       3    0  21.0       1      7.75000\n",
       "890       3    1  25.0       1      7.25000\n",
       "\n",
       "[891 rows x 5 columns]"
      ],
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Pclass</th>\n",
       "      <th>Sex</th>\n",
       "      <th>Age</th>\n",
       "      <th>Family</th>\n",
       "      <th>Single_Fare</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>3</td>\n",
       "      <td>1</td>\n",
       "      <td>1.0</td>\n",
       "      <td>4</td>\n",
       "      <td>5.14375</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>47.0</td>\n",
       "      <td>1</td>\n",
       "      <td>38.50000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>3</td>\n",
       "      <td>0</td>\n",
       "      <td>31.0</td>\n",
       "      <td>2</td>\n",
       "      <td>9.00000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>31.0</td>\n",
       "      <td>1</td>\n",
       "      <td>50.49580</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>3</td>\n",
       "      <td>0</td>\n",
       "      <td>9.0</td>\n",
       "      <td>6</td>\n",
       "      <td>4.65000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>...</th>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>886</th>\n",
       "      <td>3</td>\n",
       "      <td>1</td>\n",
       "      <td>33.0</td>\n",
       "      <td>1</td>\n",
       "      <td>8.65420</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>887</th>\n",
       "      <td>2</td>\n",
       "      <td>1</td>\n",
       "      <td>54.0</td>\n",
       "      <td>2</td>\n",
       "      <td>13.00000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>888</th>\n",
       "      <td>3</td>\n",
       "      <td>1</td>\n",
       "      <td>24.0</td>\n",
       "      <td>3</td>\n",
       "      <td>8.05000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>889</th>\n",
       "      <td>3</td>\n",
       "      <td>0</td>\n",
       "      <td>21.0</td>\n",
       "      <td>1</td>\n",
       "      <td>7.75000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>890</th>\n",
       "      <td>3</td>\n",
       "      <td>1</td>\n",
       "      <td>25.0</td>\n",
       "      <td>1</td>\n",
       "      <td>7.25000</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>891 rows × 5 columns</p>\n",
       "</div>"
      ]
     },
     "execution_count": 62,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "execution_count": 62
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-03-23T08:52:58.369203Z",
     "start_time": "2025-03-23T08:52:58.363491Z"
    }
   },
   "cell_type": "code",
   "source": "y_train1",
   "id": "b3d69a10793410e6",
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0      1\n",
       "1      0\n",
       "2      0\n",
       "3      0\n",
       "4      0\n",
       "      ..\n",
       "886    0\n",
       "887    0\n",
       "888    0\n",
       "889    0\n",
       "890    0\n",
       "Name: Survived, Length: 891, dtype: int64"
      ]
     },
     "execution_count": 63,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "execution_count": 63
  },
  {
   "metadata": {},
   "cell_type": "markdown",
   "source": "### 标准化",
   "id": "f46b45e6b568b825"
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-03-23T08:52:59.409766Z",
     "start_time": "2025-03-23T08:52:59.400720Z"
    }
   },
   "cell_type": "code",
   "source": [
    "from sklearn.preprocessing import StandardScaler\n",
    "scaler1 = StandardScaler()\n",
    "X_scaler1 = scaler1.fit_transform(X_train1)\n",
    "X_scaler1"
   ],
   "id": "7bc8c742082adaec",
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[ 0.82737724,  0.73769513, -2.16701397,  1.29942929, -0.41239965],\n",
       "       [-1.56610693,  0.73769513,  1.30401325, -0.56097483,  0.51878934],\n",
       "       [ 0.82737724, -1.35557354,  0.09669943,  0.05915988, -0.30474674],\n",
       "       ...,\n",
       "       [ 0.82737724,  0.73769513, -0.43150036,  0.67929458, -0.33126739],\n",
       "       [ 0.82737724, -1.35557354, -0.6578717 , -0.56097483, -0.33964233],\n",
       "       [ 0.82737724,  0.73769513, -0.35604325, -0.56097483, -0.35360057]])"
      ]
     },
     "execution_count": 64,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "execution_count": 64
  },
  {
   "metadata": {},
   "cell_type": "markdown",
   "source": "### 模型构建",
   "id": "a524fe1978648805"
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-03-23T08:53:01.058253Z",
     "start_time": "2025-03-23T08:53:01.052664Z"
    }
   },
   "cell_type": "code",
   "source": [
    "from sklearn.linear_model import LogisticRegression\n",
    "clf1 = LogisticRegression().fit(X_scaler1, y_train1)\n",
    "clf1"
   ],
   "id": "ff26fbfe5b99d0e8",
   "outputs": [
    {
     "data": {
      "text/plain": [
       "LogisticRegression()"
      ],
      "text/html": [
       "<style>#sk-container-id-3 {\n",
       "  /* Definition of color scheme common for light and dark mode */\n",
       "  --sklearn-color-text: #000;\n",
       "  --sklearn-color-text-muted: #666;\n",
       "  --sklearn-color-line: gray;\n",
       "  /* Definition of color scheme for unfitted estimators */\n",
       "  --sklearn-color-unfitted-level-0: #fff5e6;\n",
       "  --sklearn-color-unfitted-level-1: #f6e4d2;\n",
       "  --sklearn-color-unfitted-level-2: #ffe0b3;\n",
       "  --sklearn-color-unfitted-level-3: chocolate;\n",
       "  /* Definition of color scheme for fitted estimators */\n",
       "  --sklearn-color-fitted-level-0: #f0f8ff;\n",
       "  --sklearn-color-fitted-level-1: #d4ebff;\n",
       "  --sklearn-color-fitted-level-2: #b3dbfd;\n",
       "  --sklearn-color-fitted-level-3: cornflowerblue;\n",
       "\n",
       "  /* Specific color for light theme */\n",
       "  --sklearn-color-text-on-default-background: var(--sg-text-color, var(--theme-code-foreground, var(--jp-content-font-color1, black)));\n",
       "  --sklearn-color-background: var(--sg-background-color, var(--theme-background, var(--jp-layout-color0, white)));\n",
       "  --sklearn-color-border-box: var(--sg-text-color, var(--theme-code-foreground, var(--jp-content-font-color1, black)));\n",
       "  --sklearn-color-icon: #696969;\n",
       "\n",
       "  @media (prefers-color-scheme: dark) {\n",
       "    /* Redefinition of color scheme for dark theme */\n",
       "    --sklearn-color-text-on-default-background: var(--sg-text-color, var(--theme-code-foreground, var(--jp-content-font-color1, white)));\n",
       "    --sklearn-color-background: var(--sg-background-color, var(--theme-background, var(--jp-layout-color0, #111)));\n",
       "    --sklearn-color-border-box: var(--sg-text-color, var(--theme-code-foreground, var(--jp-content-font-color1, white)));\n",
       "    --sklearn-color-icon: #878787;\n",
       "  }\n",
       "}\n",
       "\n",
       "#sk-container-id-3 {\n",
       "  color: var(--sklearn-color-text);\n",
       "}\n",
       "\n",
       "#sk-container-id-3 pre {\n",
       "  padding: 0;\n",
       "}\n",
       "\n",
       "#sk-container-id-3 input.sk-hidden--visually {\n",
       "  border: 0;\n",
       "  clip: rect(1px 1px 1px 1px);\n",
       "  clip: rect(1px, 1px, 1px, 1px);\n",
       "  height: 1px;\n",
       "  margin: -1px;\n",
       "  overflow: hidden;\n",
       "  padding: 0;\n",
       "  position: absolute;\n",
       "  width: 1px;\n",
       "}\n",
       "\n",
       "#sk-container-id-3 div.sk-dashed-wrapped {\n",
       "  border: 1px dashed var(--sklearn-color-line);\n",
       "  margin: 0 0.4em 0.5em 0.4em;\n",
       "  box-sizing: border-box;\n",
       "  padding-bottom: 0.4em;\n",
       "  background-color: var(--sklearn-color-background);\n",
       "}\n",
       "\n",
       "#sk-container-id-3 div.sk-container {\n",
       "  /* jupyter's `normalize.less` sets `[hidden] { display: none; }`\n",
       "     but bootstrap.min.css set `[hidden] { display: none !important; }`\n",
       "     so we also need the `!important` here to be able to override the\n",
       "     default hidden behavior on the sphinx rendered scikit-learn.org.\n",
       "     See: https://github.com/scikit-learn/scikit-learn/issues/21755 */\n",
       "  display: inline-block !important;\n",
       "  position: relative;\n",
       "}\n",
       "\n",
       "#sk-container-id-3 div.sk-text-repr-fallback {\n",
       "  display: none;\n",
       "}\n",
       "\n",
       "div.sk-parallel-item,\n",
       "div.sk-serial,\n",
       "div.sk-item {\n",
       "  /* draw centered vertical line to link estimators */\n",
       "  background-image: linear-gradient(var(--sklearn-color-text-on-default-background), var(--sklearn-color-text-on-default-background));\n",
       "  background-size: 2px 100%;\n",
       "  background-repeat: no-repeat;\n",
       "  background-position: center center;\n",
       "}\n",
       "\n",
       "/* Parallel-specific style estimator block */\n",
       "\n",
       "#sk-container-id-3 div.sk-parallel-item::after {\n",
       "  content: \"\";\n",
       "  width: 100%;\n",
       "  border-bottom: 2px solid var(--sklearn-color-text-on-default-background);\n",
       "  flex-grow: 1;\n",
       "}\n",
       "\n",
       "#sk-container-id-3 div.sk-parallel {\n",
       "  display: flex;\n",
       "  align-items: stretch;\n",
       "  justify-content: center;\n",
       "  background-color: var(--sklearn-color-background);\n",
       "  position: relative;\n",
       "}\n",
       "\n",
       "#sk-container-id-3 div.sk-parallel-item {\n",
       "  display: flex;\n",
       "  flex-direction: column;\n",
       "}\n",
       "\n",
       "#sk-container-id-3 div.sk-parallel-item:first-child::after {\n",
       "  align-self: flex-end;\n",
       "  width: 50%;\n",
       "}\n",
       "\n",
       "#sk-container-id-3 div.sk-parallel-item:last-child::after {\n",
       "  align-self: flex-start;\n",
       "  width: 50%;\n",
       "}\n",
       "\n",
       "#sk-container-id-3 div.sk-parallel-item:only-child::after {\n",
       "  width: 0;\n",
       "}\n",
       "\n",
       "/* Serial-specific style estimator block */\n",
       "\n",
       "#sk-container-id-3 div.sk-serial {\n",
       "  display: flex;\n",
       "  flex-direction: column;\n",
       "  align-items: center;\n",
       "  background-color: var(--sklearn-color-background);\n",
       "  padding-right: 1em;\n",
       "  padding-left: 1em;\n",
       "}\n",
       "\n",
       "\n",
       "/* Toggleable style: style used for estimator/Pipeline/ColumnTransformer box that is\n",
       "clickable and can be expanded/collapsed.\n",
       "- Pipeline and ColumnTransformer use this feature and define the default style\n",
       "- Estimators will overwrite some part of the style using the `sk-estimator` class\n",
       "*/\n",
       "\n",
       "/* Pipeline and ColumnTransformer style (default) */\n",
       "\n",
       "#sk-container-id-3 div.sk-toggleable {\n",
       "  /* Default theme specific background. It is overwritten whether we have a\n",
       "  specific estimator or a Pipeline/ColumnTransformer */\n",
       "  background-color: var(--sklearn-color-background);\n",
       "}\n",
       "\n",
       "/* Toggleable label */\n",
       "#sk-container-id-3 label.sk-toggleable__label {\n",
       "  cursor: pointer;\n",
       "  display: flex;\n",
       "  width: 100%;\n",
       "  margin-bottom: 0;\n",
       "  padding: 0.5em;\n",
       "  box-sizing: border-box;\n",
       "  text-align: center;\n",
       "  align-items: start;\n",
       "  justify-content: space-between;\n",
       "  gap: 0.5em;\n",
       "}\n",
       "\n",
       "#sk-container-id-3 label.sk-toggleable__label .caption {\n",
       "  font-size: 0.6rem;\n",
       "  font-weight: lighter;\n",
       "  color: var(--sklearn-color-text-muted);\n",
       "}\n",
       "\n",
       "#sk-container-id-3 label.sk-toggleable__label-arrow:before {\n",
       "  /* Arrow on the left of the label */\n",
       "  content: \"▸\";\n",
       "  float: left;\n",
       "  margin-right: 0.25em;\n",
       "  color: var(--sklearn-color-icon);\n",
       "}\n",
       "\n",
       "#sk-container-id-3 label.sk-toggleable__label-arrow:hover:before {\n",
       "  color: var(--sklearn-color-text);\n",
       "}\n",
       "\n",
       "/* Toggleable content - dropdown */\n",
       "\n",
       "#sk-container-id-3 div.sk-toggleable__content {\n",
       "  max-height: 0;\n",
       "  max-width: 0;\n",
       "  overflow: hidden;\n",
       "  text-align: left;\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-unfitted-level-0);\n",
       "}\n",
       "\n",
       "#sk-container-id-3 div.sk-toggleable__content.fitted {\n",
       "  /* fitted */\n",
       "  background-color: var(--sklearn-color-fitted-level-0);\n",
       "}\n",
       "\n",
       "#sk-container-id-3 div.sk-toggleable__content pre {\n",
       "  margin: 0.2em;\n",
       "  border-radius: 0.25em;\n",
       "  color: var(--sklearn-color-text);\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-unfitted-level-0);\n",
       "}\n",
       "\n",
       "#sk-container-id-3 div.sk-toggleable__content.fitted pre {\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-fitted-level-0);\n",
       "}\n",
       "\n",
       "#sk-container-id-3 input.sk-toggleable__control:checked~div.sk-toggleable__content {\n",
       "  /* Expand drop-down */\n",
       "  max-height: 200px;\n",
       "  max-width: 100%;\n",
       "  overflow: auto;\n",
       "}\n",
       "\n",
       "#sk-container-id-3 input.sk-toggleable__control:checked~label.sk-toggleable__label-arrow:before {\n",
       "  content: \"▾\";\n",
       "}\n",
       "\n",
       "/* Pipeline/ColumnTransformer-specific style */\n",
       "\n",
       "#sk-container-id-3 div.sk-label input.sk-toggleable__control:checked~label.sk-toggleable__label {\n",
       "  color: var(--sklearn-color-text);\n",
       "  background-color: var(--sklearn-color-unfitted-level-2);\n",
       "}\n",
       "\n",
       "#sk-container-id-3 div.sk-label.fitted input.sk-toggleable__control:checked~label.sk-toggleable__label {\n",
       "  background-color: var(--sklearn-color-fitted-level-2);\n",
       "}\n",
       "\n",
       "/* Estimator-specific style */\n",
       "\n",
       "/* Colorize estimator box */\n",
       "#sk-container-id-3 div.sk-estimator input.sk-toggleable__control:checked~label.sk-toggleable__label {\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-unfitted-level-2);\n",
       "}\n",
       "\n",
       "#sk-container-id-3 div.sk-estimator.fitted input.sk-toggleable__control:checked~label.sk-toggleable__label {\n",
       "  /* fitted */\n",
       "  background-color: var(--sklearn-color-fitted-level-2);\n",
       "}\n",
       "\n",
       "#sk-container-id-3 div.sk-label label.sk-toggleable__label,\n",
       "#sk-container-id-3 div.sk-label label {\n",
       "  /* The background is the default theme color */\n",
       "  color: var(--sklearn-color-text-on-default-background);\n",
       "}\n",
       "\n",
       "/* On hover, darken the color of the background */\n",
       "#sk-container-id-3 div.sk-label:hover label.sk-toggleable__label {\n",
       "  color: var(--sklearn-color-text);\n",
       "  background-color: var(--sklearn-color-unfitted-level-2);\n",
       "}\n",
       "\n",
       "/* Label box, darken color on hover, fitted */\n",
       "#sk-container-id-3 div.sk-label.fitted:hover label.sk-toggleable__label.fitted {\n",
       "  color: var(--sklearn-color-text);\n",
       "  background-color: var(--sklearn-color-fitted-level-2);\n",
       "}\n",
       "\n",
       "/* Estimator label */\n",
       "\n",
       "#sk-container-id-3 div.sk-label label {\n",
       "  font-family: monospace;\n",
       "  font-weight: bold;\n",
       "  display: inline-block;\n",
       "  line-height: 1.2em;\n",
       "}\n",
       "\n",
       "#sk-container-id-3 div.sk-label-container {\n",
       "  text-align: center;\n",
       "}\n",
       "\n",
       "/* Estimator-specific */\n",
       "#sk-container-id-3 div.sk-estimator {\n",
       "  font-family: monospace;\n",
       "  border: 1px dotted var(--sklearn-color-border-box);\n",
       "  border-radius: 0.25em;\n",
       "  box-sizing: border-box;\n",
       "  margin-bottom: 0.5em;\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-unfitted-level-0);\n",
       "}\n",
       "\n",
       "#sk-container-id-3 div.sk-estimator.fitted {\n",
       "  /* fitted */\n",
       "  background-color: var(--sklearn-color-fitted-level-0);\n",
       "}\n",
       "\n",
       "/* on hover */\n",
       "#sk-container-id-3 div.sk-estimator:hover {\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-unfitted-level-2);\n",
       "}\n",
       "\n",
       "#sk-container-id-3 div.sk-estimator.fitted:hover {\n",
       "  /* fitted */\n",
       "  background-color: var(--sklearn-color-fitted-level-2);\n",
       "}\n",
       "\n",
       "/* Specification for estimator info (e.g. \"i\" and \"?\") */\n",
       "\n",
       "/* Common style for \"i\" and \"?\" */\n",
       "\n",
       ".sk-estimator-doc-link,\n",
       "a:link.sk-estimator-doc-link,\n",
       "a:visited.sk-estimator-doc-link {\n",
       "  float: right;\n",
       "  font-size: smaller;\n",
       "  line-height: 1em;\n",
       "  font-family: monospace;\n",
       "  background-color: var(--sklearn-color-background);\n",
       "  border-radius: 1em;\n",
       "  height: 1em;\n",
       "  width: 1em;\n",
       "  text-decoration: none !important;\n",
       "  margin-left: 0.5em;\n",
       "  text-align: center;\n",
       "  /* unfitted */\n",
       "  border: var(--sklearn-color-unfitted-level-1) 1pt solid;\n",
       "  color: var(--sklearn-color-unfitted-level-1);\n",
       "}\n",
       "\n",
       ".sk-estimator-doc-link.fitted,\n",
       "a:link.sk-estimator-doc-link.fitted,\n",
       "a:visited.sk-estimator-doc-link.fitted {\n",
       "  /* fitted */\n",
       "  border: var(--sklearn-color-fitted-level-1) 1pt solid;\n",
       "  color: var(--sklearn-color-fitted-level-1);\n",
       "}\n",
       "\n",
       "/* On hover */\n",
       "div.sk-estimator:hover .sk-estimator-doc-link:hover,\n",
       ".sk-estimator-doc-link:hover,\n",
       "div.sk-label-container:hover .sk-estimator-doc-link:hover,\n",
       ".sk-estimator-doc-link:hover {\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-unfitted-level-3);\n",
       "  color: var(--sklearn-color-background);\n",
       "  text-decoration: none;\n",
       "}\n",
       "\n",
       "div.sk-estimator.fitted:hover .sk-estimator-doc-link.fitted:hover,\n",
       ".sk-estimator-doc-link.fitted:hover,\n",
       "div.sk-label-container:hover .sk-estimator-doc-link.fitted:hover,\n",
       ".sk-estimator-doc-link.fitted:hover {\n",
       "  /* fitted */\n",
       "  background-color: var(--sklearn-color-fitted-level-3);\n",
       "  color: var(--sklearn-color-background);\n",
       "  text-decoration: none;\n",
       "}\n",
       "\n",
       "/* Span, style for the box shown on hovering the info icon */\n",
       ".sk-estimator-doc-link span {\n",
       "  display: none;\n",
       "  z-index: 9999;\n",
       "  position: relative;\n",
       "  font-weight: normal;\n",
       "  right: .2ex;\n",
       "  padding: .5ex;\n",
       "  margin: .5ex;\n",
       "  width: min-content;\n",
       "  min-width: 20ex;\n",
       "  max-width: 50ex;\n",
       "  color: var(--sklearn-color-text);\n",
       "  box-shadow: 2pt 2pt 4pt #999;\n",
       "  /* unfitted */\n",
       "  background: var(--sklearn-color-unfitted-level-0);\n",
       "  border: .5pt solid var(--sklearn-color-unfitted-level-3);\n",
       "}\n",
       "\n",
       ".sk-estimator-doc-link.fitted span {\n",
       "  /* fitted */\n",
       "  background: var(--sklearn-color-fitted-level-0);\n",
       "  border: var(--sklearn-color-fitted-level-3);\n",
       "}\n",
       "\n",
       ".sk-estimator-doc-link:hover span {\n",
       "  display: block;\n",
       "}\n",
       "\n",
       "/* \"?\"-specific style due to the `<a>` HTML tag */\n",
       "\n",
       "#sk-container-id-3 a.estimator_doc_link {\n",
       "  float: right;\n",
       "  font-size: 1rem;\n",
       "  line-height: 1em;\n",
       "  font-family: monospace;\n",
       "  background-color: var(--sklearn-color-background);\n",
       "  border-radius: 1rem;\n",
       "  height: 1rem;\n",
       "  width: 1rem;\n",
       "  text-decoration: none;\n",
       "  /* unfitted */\n",
       "  color: var(--sklearn-color-unfitted-level-1);\n",
       "  border: var(--sklearn-color-unfitted-level-1) 1pt solid;\n",
       "}\n",
       "\n",
       "#sk-container-id-3 a.estimator_doc_link.fitted {\n",
       "  /* fitted */\n",
       "  border: var(--sklearn-color-fitted-level-1) 1pt solid;\n",
       "  color: var(--sklearn-color-fitted-level-1);\n",
       "}\n",
       "\n",
       "/* On hover */\n",
       "#sk-container-id-3 a.estimator_doc_link:hover {\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-unfitted-level-3);\n",
       "  color: var(--sklearn-color-background);\n",
       "  text-decoration: none;\n",
       "}\n",
       "\n",
       "#sk-container-id-3 a.estimator_doc_link.fitted:hover {\n",
       "  /* fitted */\n",
       "  background-color: var(--sklearn-color-fitted-level-3);\n",
       "}\n",
       "</style><div id=\"sk-container-id-3\" class=\"sk-top-container\"><div class=\"sk-text-repr-fallback\"><pre>LogisticRegression()</pre><b>In a Jupyter environment, please rerun this cell to show the HTML representation or trust the notebook. <br />On GitHub, the HTML representation is unable to render, please try loading this page with nbviewer.org.</b></div><div class=\"sk-container\" hidden><div class=\"sk-item\"><div class=\"sk-estimator fitted sk-toggleable\"><input class=\"sk-toggleable__control sk-hidden--visually\" id=\"sk-estimator-id-3\" type=\"checkbox\" checked><label for=\"sk-estimator-id-3\" class=\"sk-toggleable__label fitted sk-toggleable__label-arrow\"><div><div>LogisticRegression</div></div><div><a class=\"sk-estimator-doc-link fitted\" rel=\"noreferrer\" target=\"_blank\" href=\"https://scikit-learn.org/1.6/modules/generated/sklearn.linear_model.LogisticRegression.html\">?<span>Documentation for LogisticRegression</span></a><span class=\"sk-estimator-doc-link fitted\">i<span>Fitted</span></span></div></label><div class=\"sk-toggleable__content fitted\"><pre>LogisticRegression()</pre></div> </div></div></div></div>"
      ]
     },
     "execution_count": 65,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "execution_count": 65
  },
  {
   "metadata": {},
   "cell_type": "markdown",
   "source": "## 四、模型评估",
   "id": "b4e3e15aa5fd9738"
  },
  {
   "metadata": {},
   "cell_type": "markdown",
   "source": "### 交叉验证",
   "id": "b1d0857b7c95ed05"
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-03-23T08:53:03.119363Z",
     "start_time": "2025-03-23T08:53:03.091291Z"
    }
   },
   "cell_type": "code",
   "source": [
    "from sklearn.model_selection import cross_val_score\n",
    "cv10 = cross_val_score(clf1, X_scaler1, y_train1, cv=10, scoring='accuracy')\n",
    "cv10"
   ],
   "id": "6990b7bda9236d7",
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([0.8       , 0.78651685, 0.7752809 , 0.87640449, 0.84269663,\n",
       "       0.79775281, 0.76404494, 0.70786517, 0.80898876, 0.85393258])"
      ]
     },
     "execution_count": 66,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "execution_count": 66
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-03-23T08:53:03.752661Z",
     "start_time": "2025-03-23T08:53:03.748307Z"
    }
   },
   "cell_type": "code",
   "source": "cv10.sum() / 10",
   "id": "d882c808b39d1090",
   "outputs": [
    {
     "data": {
      "text/plain": [
       "np.float64(0.8013483146067415)"
      ]
     },
     "execution_count": 67,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "execution_count": 67
  },
  {
   "metadata": {},
   "cell_type": "markdown",
   "source": "***交叉验证结果平均大约为 80%，模型仍需优化。***",
   "id": "30b08f2da786a590"
  },
  {
   "metadata": {},
   "cell_type": "markdown",
   "source": "### 混淆矩阵",
   "id": "a2e1f3e367e09352"
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-03-23T08:53:24.683419Z",
     "start_time": "2025-03-23T08:53:24.679184Z"
    }
   },
   "cell_type": "code",
   "source": "y_pred1 = clf1.predict(X_scaler1)",
   "id": "a74e28acb0525534",
   "outputs": [],
   "execution_count": 68
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-03-23T08:53:25.487866Z",
     "start_time": "2025-03-23T08:53:25.481176Z"
    }
   },
   "cell_type": "code",
   "source": [
    "from sklearn.metrics import confusion_matrix, classification_report\n",
    "confusion_matrix(y_train1, y_pred1)"
   ],
   "id": "ff452d8e47e1368f",
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[471,  78],\n",
       "       [ 98, 244]])"
      ]
     },
     "execution_count": 69,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "execution_count": 69
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-03-23T08:53:26.546336Z",
     "start_time": "2025-03-23T08:53:26.538084Z"
    }
   },
   "cell_type": "code",
   "source": "print(classification_report(y_train1, y_pred1))",
   "id": "622ec81972127509",
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "              precision    recall  f1-score   support\n",
      "\n",
      "           0       0.83      0.86      0.84       549\n",
      "           1       0.76      0.71      0.73       342\n",
      "\n",
      "    accuracy                           0.80       891\n",
      "   macro avg       0.79      0.79      0.79       891\n",
      "weighted avg       0.80      0.80      0.80       891\n",
      "\n"
     ]
    }
   ],
   "execution_count": 70
  },
  {
   "metadata": {},
   "cell_type": "markdown",
   "source": [
    "***准确性 = 80%***\n",
    "\n",
    "***对于未生还的精度 = 84%***\n",
    "\n",
    "***对于生还的精度 = 73%（数据存在轻微不平衡，负类样本更多。）***"
   ],
   "id": "529a221af6bfcbb1"
  },
  {
   "metadata": {},
   "cell_type": "markdown",
   "source": "### AUC | ROC",
   "id": "cd5cf0f8d26c260b"
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-03-23T08:53:58.701042Z",
     "start_time": "2025-03-23T08:53:58.696200Z"
    }
   },
   "cell_type": "code",
   "source": "y_proba1 = clf1.predict_proba(X_scaler1)[:, 1]",
   "id": "7104878d5121810a",
   "outputs": [],
   "execution_count": 72
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-03-23T08:53:59.164635Z",
     "start_time": "2025-03-23T08:53:59.156481Z"
    }
   },
   "cell_type": "code",
   "source": [
    "from sklearn.metrics import roc_auc_score, roc_curve\n",
    "roc_auc_score(y_train1, y_proba1)"
   ],
   "id": "771725566c51fd42",
   "outputs": [
    {
     "data": {
      "text/plain": [
       "np.float64(0.8594680386454905)"
      ]
     },
     "execution_count": 73,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "execution_count": 73
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-03-23T08:54:00.925168Z",
     "start_time": "2025-03-23T08:54:00.852529Z"
    }
   },
   "cell_type": "code",
   "source": [
    "fpr, tpr, thresholds = roc_curve(y_train1, y_proba1)\n",
    "plt.figure(figsize=(6, 6))\n",
    "plt.plot(fpr, tpr)\n",
    "plt.plot([0, 1], [0, 1], 'k--')\n",
    "plt.axis((0, 1, 0, 1))\n",
    "plt.xlabel('FPR', fontsize=12)\n",
    "plt.ylabel('TPR', fontsize=12)"
   ],
   "id": "1b4b9a3c6ca1762e",
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Text(0, 0.5, 'TPR')"
      ]
     },
     "execution_count": 74,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "text/plain": [
       "<Figure size 600x600 with 1 Axes>"
      ],
      "image/png": "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"
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "execution_count": 74
  },
  {
   "metadata": {},
   "cell_type": "markdown",
   "source": [
    "***AUC = 0.86 模型区分能力较好***\n",
    "\n",
    "***ROC曲线表现较好，模型具有一定的泛化能力。***"
   ],
   "id": "8f964ab399a28939"
  },
  {
   "metadata": {},
   "cell_type": "markdown",
   "source": "**80% 的准确率对实际预测可能更低，生还的准确率较低。**",
   "id": "c39291997e894d61"
  },
  {
   "metadata": {},
   "cell_type": "markdown",
   "source": "## 五、模型优化",
   "id": "53f3f8f3ef50f84f"
  },
  {
   "metadata": {},
   "cell_type": "markdown",
   "source": [
    "### 尝试加入 Ticket | Fare\n",
    "\n",
    "**票号(Ticket)** 能够间接反映乘客在船上的位置\n",
    "\n",
    "**票价(Fare)** 或称为家庭票价，能够间接印证家庭团体的力量"
   ],
   "id": "595fe0d77c2daec"
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-03-23T08:55:16.936052Z",
     "start_time": "2025-03-23T08:55:16.928442Z"
    }
   },
   "cell_type": "code",
   "source": [
    "X_train2 = data_shuffle[['Pclass', 'Sex', 'Age', 'Family', 'Fare', 'Single_Fare', 'Ticket']]\n",
    "y_train2 = data_shuffle['Survived']\n",
    "X_train2"
   ],
   "id": "94b9c3aeb8dde48d",
   "outputs": [
    {
     "data": {
      "text/plain": [
       "     Pclass  Sex   Age  Family     Fare  Single_Fare  Ticket\n",
       "0         3    1   1.0       4  20.5750      5.14375    2315\n",
       "1         1    1  47.0       1  38.5000     38.50000  111320\n",
       "2         3    0  31.0       2  18.0000      9.00000  345763\n",
       "3         1    1  31.0       1  50.4958     50.49580   17590\n",
       "4         3    0   9.0       6  27.9000      4.65000  347088\n",
       "..      ...  ...   ...     ...      ...          ...     ...\n",
       "886       3    1  33.0       1   8.6542      8.65420    7540\n",
       "887       2    1  54.0       2  26.0000     13.00000  244252\n",
       "888       3    1  24.0       3  24.1500      8.05000   48871\n",
       "889       3    0  21.0       1   7.7500      7.75000  364846\n",
       "890       3    1  25.0       1   7.2500      7.25000  374887\n",
       "\n",
       "[891 rows x 7 columns]"
      ],
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Pclass</th>\n",
       "      <th>Sex</th>\n",
       "      <th>Age</th>\n",
       "      <th>Family</th>\n",
       "      <th>Fare</th>\n",
       "      <th>Single_Fare</th>\n",
       "      <th>Ticket</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>3</td>\n",
       "      <td>1</td>\n",
       "      <td>1.0</td>\n",
       "      <td>4</td>\n",
       "      <td>20.5750</td>\n",
       "      <td>5.14375</td>\n",
       "      <td>2315</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>47.0</td>\n",
       "      <td>1</td>\n",
       "      <td>38.5000</td>\n",
       "      <td>38.50000</td>\n",
       "      <td>111320</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>3</td>\n",
       "      <td>0</td>\n",
       "      <td>31.0</td>\n",
       "      <td>2</td>\n",
       "      <td>18.0000</td>\n",
       "      <td>9.00000</td>\n",
       "      <td>345763</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>31.0</td>\n",
       "      <td>1</td>\n",
       "      <td>50.4958</td>\n",
       "      <td>50.49580</td>\n",
       "      <td>17590</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>3</td>\n",
       "      <td>0</td>\n",
       "      <td>9.0</td>\n",
       "      <td>6</td>\n",
       "      <td>27.9000</td>\n",
       "      <td>4.65000</td>\n",
       "      <td>347088</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>...</th>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>886</th>\n",
       "      <td>3</td>\n",
       "      <td>1</td>\n",
       "      <td>33.0</td>\n",
       "      <td>1</td>\n",
       "      <td>8.6542</td>\n",
       "      <td>8.65420</td>\n",
       "      <td>7540</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>887</th>\n",
       "      <td>2</td>\n",
       "      <td>1</td>\n",
       "      <td>54.0</td>\n",
       "      <td>2</td>\n",
       "      <td>26.0000</td>\n",
       "      <td>13.00000</td>\n",
       "      <td>244252</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>888</th>\n",
       "      <td>3</td>\n",
       "      <td>1</td>\n",
       "      <td>24.0</td>\n",
       "      <td>3</td>\n",
       "      <td>24.1500</td>\n",
       "      <td>8.05000</td>\n",
       "      <td>48871</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>889</th>\n",
       "      <td>3</td>\n",
       "      <td>0</td>\n",
       "      <td>21.0</td>\n",
       "      <td>1</td>\n",
       "      <td>7.7500</td>\n",
       "      <td>7.75000</td>\n",
       "      <td>364846</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>890</th>\n",
       "      <td>3</td>\n",
       "      <td>1</td>\n",
       "      <td>25.0</td>\n",
       "      <td>1</td>\n",
       "      <td>7.2500</td>\n",
       "      <td>7.25000</td>\n",
       "      <td>374887</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>891 rows × 7 columns</p>\n",
       "</div>"
      ]
     },
     "execution_count": 75,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "execution_count": 75
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-03-23T08:55:25.641230Z",
     "start_time": "2025-03-23T08:55:25.634042Z"
    }
   },
   "cell_type": "code",
   "source": [
    "from sklearn.preprocessing import StandardScaler\n",
    "scaler2 = StandardScaler()\n",
    "X_scaler2 = scaler2.fit_transform(X_train2)\n",
    "X_scaler2"
   ],
   "id": "855244730cbed86f",
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[ 0.82737724,  0.73769513, -2.16701397, ..., -0.23415046,\n",
       "        -0.41239965, -0.45141199],\n",
       "       [-1.56610693,  0.73769513,  1.30401325, ...,  0.1267638 ,\n",
       "         0.51878934, -0.2851867 ],\n",
       "       [ 0.82737724, -1.35557354,  0.09669943, ..., -0.28599728,\n",
       "        -0.30474674,  0.0723231 ],\n",
       "       ...,\n",
       "       [ 0.82737724,  0.73769513, -0.43150036, ..., -0.16216896,\n",
       "        -0.33126739, -0.38041722],\n",
       "       [ 0.82737724, -1.35557354, -0.6578717 , ..., -0.49237783,\n",
       "        -0.33964233,  0.1014234 ],\n",
       "       [ 0.82737724,  0.73769513, -0.35604325, ..., -0.50244517,\n",
       "        -0.35360057,  0.11673524]])"
      ]
     },
     "execution_count": 76,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "execution_count": 76
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-03-23T08:55:28.995116Z",
     "start_time": "2025-03-23T08:55:28.989198Z"
    }
   },
   "cell_type": "code",
   "source": [
    "from sklearn.linear_model import LogisticRegression\n",
    "clf2 = LogisticRegression().fit(X_scaler2, y_train2)\n",
    "clf2"
   ],
   "id": "30613475df47a997",
   "outputs": [
    {
     "data": {
      "text/plain": [
       "LogisticRegression()"
      ],
      "text/html": [
       "<style>#sk-container-id-4 {\n",
       "  /* Definition of color scheme common for light and dark mode */\n",
       "  --sklearn-color-text: #000;\n",
       "  --sklearn-color-text-muted: #666;\n",
       "  --sklearn-color-line: gray;\n",
       "  /* Definition of color scheme for unfitted estimators */\n",
       "  --sklearn-color-unfitted-level-0: #fff5e6;\n",
       "  --sklearn-color-unfitted-level-1: #f6e4d2;\n",
       "  --sklearn-color-unfitted-level-2: #ffe0b3;\n",
       "  --sklearn-color-unfitted-level-3: chocolate;\n",
       "  /* Definition of color scheme for fitted estimators */\n",
       "  --sklearn-color-fitted-level-0: #f0f8ff;\n",
       "  --sklearn-color-fitted-level-1: #d4ebff;\n",
       "  --sklearn-color-fitted-level-2: #b3dbfd;\n",
       "  --sklearn-color-fitted-level-3: cornflowerblue;\n",
       "\n",
       "  /* Specific color for light theme */\n",
       "  --sklearn-color-text-on-default-background: var(--sg-text-color, var(--theme-code-foreground, var(--jp-content-font-color1, black)));\n",
       "  --sklearn-color-background: var(--sg-background-color, var(--theme-background, var(--jp-layout-color0, white)));\n",
       "  --sklearn-color-border-box: var(--sg-text-color, var(--theme-code-foreground, var(--jp-content-font-color1, black)));\n",
       "  --sklearn-color-icon: #696969;\n",
       "\n",
       "  @media (prefers-color-scheme: dark) {\n",
       "    /* Redefinition of color scheme for dark theme */\n",
       "    --sklearn-color-text-on-default-background: var(--sg-text-color, var(--theme-code-foreground, var(--jp-content-font-color1, white)));\n",
       "    --sklearn-color-background: var(--sg-background-color, var(--theme-background, var(--jp-layout-color0, #111)));\n",
       "    --sklearn-color-border-box: var(--sg-text-color, var(--theme-code-foreground, var(--jp-content-font-color1, white)));\n",
       "    --sklearn-color-icon: #878787;\n",
       "  }\n",
       "}\n",
       "\n",
       "#sk-container-id-4 {\n",
       "  color: var(--sklearn-color-text);\n",
       "}\n",
       "\n",
       "#sk-container-id-4 pre {\n",
       "  padding: 0;\n",
       "}\n",
       "\n",
       "#sk-container-id-4 input.sk-hidden--visually {\n",
       "  border: 0;\n",
       "  clip: rect(1px 1px 1px 1px);\n",
       "  clip: rect(1px, 1px, 1px, 1px);\n",
       "  height: 1px;\n",
       "  margin: -1px;\n",
       "  overflow: hidden;\n",
       "  padding: 0;\n",
       "  position: absolute;\n",
       "  width: 1px;\n",
       "}\n",
       "\n",
       "#sk-container-id-4 div.sk-dashed-wrapped {\n",
       "  border: 1px dashed var(--sklearn-color-line);\n",
       "  margin: 0 0.4em 0.5em 0.4em;\n",
       "  box-sizing: border-box;\n",
       "  padding-bottom: 0.4em;\n",
       "  background-color: var(--sklearn-color-background);\n",
       "}\n",
       "\n",
       "#sk-container-id-4 div.sk-container {\n",
       "  /* jupyter's `normalize.less` sets `[hidden] { display: none; }`\n",
       "     but bootstrap.min.css set `[hidden] { display: none !important; }`\n",
       "     so we also need the `!important` here to be able to override the\n",
       "     default hidden behavior on the sphinx rendered scikit-learn.org.\n",
       "     See: https://github.com/scikit-learn/scikit-learn/issues/21755 */\n",
       "  display: inline-block !important;\n",
       "  position: relative;\n",
       "}\n",
       "\n",
       "#sk-container-id-4 div.sk-text-repr-fallback {\n",
       "  display: none;\n",
       "}\n",
       "\n",
       "div.sk-parallel-item,\n",
       "div.sk-serial,\n",
       "div.sk-item {\n",
       "  /* draw centered vertical line to link estimators */\n",
       "  background-image: linear-gradient(var(--sklearn-color-text-on-default-background), var(--sklearn-color-text-on-default-background));\n",
       "  background-size: 2px 100%;\n",
       "  background-repeat: no-repeat;\n",
       "  background-position: center center;\n",
       "}\n",
       "\n",
       "/* Parallel-specific style estimator block */\n",
       "\n",
       "#sk-container-id-4 div.sk-parallel-item::after {\n",
       "  content: \"\";\n",
       "  width: 100%;\n",
       "  border-bottom: 2px solid var(--sklearn-color-text-on-default-background);\n",
       "  flex-grow: 1;\n",
       "}\n",
       "\n",
       "#sk-container-id-4 div.sk-parallel {\n",
       "  display: flex;\n",
       "  align-items: stretch;\n",
       "  justify-content: center;\n",
       "  background-color: var(--sklearn-color-background);\n",
       "  position: relative;\n",
       "}\n",
       "\n",
       "#sk-container-id-4 div.sk-parallel-item {\n",
       "  display: flex;\n",
       "  flex-direction: column;\n",
       "}\n",
       "\n",
       "#sk-container-id-4 div.sk-parallel-item:first-child::after {\n",
       "  align-self: flex-end;\n",
       "  width: 50%;\n",
       "}\n",
       "\n",
       "#sk-container-id-4 div.sk-parallel-item:last-child::after {\n",
       "  align-self: flex-start;\n",
       "  width: 50%;\n",
       "}\n",
       "\n",
       "#sk-container-id-4 div.sk-parallel-item:only-child::after {\n",
       "  width: 0;\n",
       "}\n",
       "\n",
       "/* Serial-specific style estimator block */\n",
       "\n",
       "#sk-container-id-4 div.sk-serial {\n",
       "  display: flex;\n",
       "  flex-direction: column;\n",
       "  align-items: center;\n",
       "  background-color: var(--sklearn-color-background);\n",
       "  padding-right: 1em;\n",
       "  padding-left: 1em;\n",
       "}\n",
       "\n",
       "\n",
       "/* Toggleable style: style used for estimator/Pipeline/ColumnTransformer box that is\n",
       "clickable and can be expanded/collapsed.\n",
       "- Pipeline and ColumnTransformer use this feature and define the default style\n",
       "- Estimators will overwrite some part of the style using the `sk-estimator` class\n",
       "*/\n",
       "\n",
       "/* Pipeline and ColumnTransformer style (default) */\n",
       "\n",
       "#sk-container-id-4 div.sk-toggleable {\n",
       "  /* Default theme specific background. It is overwritten whether we have a\n",
       "  specific estimator or a Pipeline/ColumnTransformer */\n",
       "  background-color: var(--sklearn-color-background);\n",
       "}\n",
       "\n",
       "/* Toggleable label */\n",
       "#sk-container-id-4 label.sk-toggleable__label {\n",
       "  cursor: pointer;\n",
       "  display: flex;\n",
       "  width: 100%;\n",
       "  margin-bottom: 0;\n",
       "  padding: 0.5em;\n",
       "  box-sizing: border-box;\n",
       "  text-align: center;\n",
       "  align-items: start;\n",
       "  justify-content: space-between;\n",
       "  gap: 0.5em;\n",
       "}\n",
       "\n",
       "#sk-container-id-4 label.sk-toggleable__label .caption {\n",
       "  font-size: 0.6rem;\n",
       "  font-weight: lighter;\n",
       "  color: var(--sklearn-color-text-muted);\n",
       "}\n",
       "\n",
       "#sk-container-id-4 label.sk-toggleable__label-arrow:before {\n",
       "  /* Arrow on the left of the label */\n",
       "  content: \"▸\";\n",
       "  float: left;\n",
       "  margin-right: 0.25em;\n",
       "  color: var(--sklearn-color-icon);\n",
       "}\n",
       "\n",
       "#sk-container-id-4 label.sk-toggleable__label-arrow:hover:before {\n",
       "  color: var(--sklearn-color-text);\n",
       "}\n",
       "\n",
       "/* Toggleable content - dropdown */\n",
       "\n",
       "#sk-container-id-4 div.sk-toggleable__content {\n",
       "  max-height: 0;\n",
       "  max-width: 0;\n",
       "  overflow: hidden;\n",
       "  text-align: left;\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-unfitted-level-0);\n",
       "}\n",
       "\n",
       "#sk-container-id-4 div.sk-toggleable__content.fitted {\n",
       "  /* fitted */\n",
       "  background-color: var(--sklearn-color-fitted-level-0);\n",
       "}\n",
       "\n",
       "#sk-container-id-4 div.sk-toggleable__content pre {\n",
       "  margin: 0.2em;\n",
       "  border-radius: 0.25em;\n",
       "  color: var(--sklearn-color-text);\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-unfitted-level-0);\n",
       "}\n",
       "\n",
       "#sk-container-id-4 div.sk-toggleable__content.fitted pre {\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-fitted-level-0);\n",
       "}\n",
       "\n",
       "#sk-container-id-4 input.sk-toggleable__control:checked~div.sk-toggleable__content {\n",
       "  /* Expand drop-down */\n",
       "  max-height: 200px;\n",
       "  max-width: 100%;\n",
       "  overflow: auto;\n",
       "}\n",
       "\n",
       "#sk-container-id-4 input.sk-toggleable__control:checked~label.sk-toggleable__label-arrow:before {\n",
       "  content: \"▾\";\n",
       "}\n",
       "\n",
       "/* Pipeline/ColumnTransformer-specific style */\n",
       "\n",
       "#sk-container-id-4 div.sk-label input.sk-toggleable__control:checked~label.sk-toggleable__label {\n",
       "  color: var(--sklearn-color-text);\n",
       "  background-color: var(--sklearn-color-unfitted-level-2);\n",
       "}\n",
       "\n",
       "#sk-container-id-4 div.sk-label.fitted input.sk-toggleable__control:checked~label.sk-toggleable__label {\n",
       "  background-color: var(--sklearn-color-fitted-level-2);\n",
       "}\n",
       "\n",
       "/* Estimator-specific style */\n",
       "\n",
       "/* Colorize estimator box */\n",
       "#sk-container-id-4 div.sk-estimator input.sk-toggleable__control:checked~label.sk-toggleable__label {\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-unfitted-level-2);\n",
       "}\n",
       "\n",
       "#sk-container-id-4 div.sk-estimator.fitted input.sk-toggleable__control:checked~label.sk-toggleable__label {\n",
       "  /* fitted */\n",
       "  background-color: var(--sklearn-color-fitted-level-2);\n",
       "}\n",
       "\n",
       "#sk-container-id-4 div.sk-label label.sk-toggleable__label,\n",
       "#sk-container-id-4 div.sk-label label {\n",
       "  /* The background is the default theme color */\n",
       "  color: var(--sklearn-color-text-on-default-background);\n",
       "}\n",
       "\n",
       "/* On hover, darken the color of the background */\n",
       "#sk-container-id-4 div.sk-label:hover label.sk-toggleable__label {\n",
       "  color: var(--sklearn-color-text);\n",
       "  background-color: var(--sklearn-color-unfitted-level-2);\n",
       "}\n",
       "\n",
       "/* Label box, darken color on hover, fitted */\n",
       "#sk-container-id-4 div.sk-label.fitted:hover label.sk-toggleable__label.fitted {\n",
       "  color: var(--sklearn-color-text);\n",
       "  background-color: var(--sklearn-color-fitted-level-2);\n",
       "}\n",
       "\n",
       "/* Estimator label */\n",
       "\n",
       "#sk-container-id-4 div.sk-label label {\n",
       "  font-family: monospace;\n",
       "  font-weight: bold;\n",
       "  display: inline-block;\n",
       "  line-height: 1.2em;\n",
       "}\n",
       "\n",
       "#sk-container-id-4 div.sk-label-container {\n",
       "  text-align: center;\n",
       "}\n",
       "\n",
       "/* Estimator-specific */\n",
       "#sk-container-id-4 div.sk-estimator {\n",
       "  font-family: monospace;\n",
       "  border: 1px dotted var(--sklearn-color-border-box);\n",
       "  border-radius: 0.25em;\n",
       "  box-sizing: border-box;\n",
       "  margin-bottom: 0.5em;\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-unfitted-level-0);\n",
       "}\n",
       "\n",
       "#sk-container-id-4 div.sk-estimator.fitted {\n",
       "  /* fitted */\n",
       "  background-color: var(--sklearn-color-fitted-level-0);\n",
       "}\n",
       "\n",
       "/* on hover */\n",
       "#sk-container-id-4 div.sk-estimator:hover {\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-unfitted-level-2);\n",
       "}\n",
       "\n",
       "#sk-container-id-4 div.sk-estimator.fitted:hover {\n",
       "  /* fitted */\n",
       "  background-color: var(--sklearn-color-fitted-level-2);\n",
       "}\n",
       "\n",
       "/* Specification for estimator info (e.g. \"i\" and \"?\") */\n",
       "\n",
       "/* Common style for \"i\" and \"?\" */\n",
       "\n",
       ".sk-estimator-doc-link,\n",
       "a:link.sk-estimator-doc-link,\n",
       "a:visited.sk-estimator-doc-link {\n",
       "  float: right;\n",
       "  font-size: smaller;\n",
       "  line-height: 1em;\n",
       "  font-family: monospace;\n",
       "  background-color: var(--sklearn-color-background);\n",
       "  border-radius: 1em;\n",
       "  height: 1em;\n",
       "  width: 1em;\n",
       "  text-decoration: none !important;\n",
       "  margin-left: 0.5em;\n",
       "  text-align: center;\n",
       "  /* unfitted */\n",
       "  border: var(--sklearn-color-unfitted-level-1) 1pt solid;\n",
       "  color: var(--sklearn-color-unfitted-level-1);\n",
       "}\n",
       "\n",
       ".sk-estimator-doc-link.fitted,\n",
       "a:link.sk-estimator-doc-link.fitted,\n",
       "a:visited.sk-estimator-doc-link.fitted {\n",
       "  /* fitted */\n",
       "  border: var(--sklearn-color-fitted-level-1) 1pt solid;\n",
       "  color: var(--sklearn-color-fitted-level-1);\n",
       "}\n",
       "\n",
       "/* On hover */\n",
       "div.sk-estimator:hover .sk-estimator-doc-link:hover,\n",
       ".sk-estimator-doc-link:hover,\n",
       "div.sk-label-container:hover .sk-estimator-doc-link:hover,\n",
       ".sk-estimator-doc-link:hover {\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-unfitted-level-3);\n",
       "  color: var(--sklearn-color-background);\n",
       "  text-decoration: none;\n",
       "}\n",
       "\n",
       "div.sk-estimator.fitted:hover .sk-estimator-doc-link.fitted:hover,\n",
       ".sk-estimator-doc-link.fitted:hover,\n",
       "div.sk-label-container:hover .sk-estimator-doc-link.fitted:hover,\n",
       ".sk-estimator-doc-link.fitted:hover {\n",
       "  /* fitted */\n",
       "  background-color: var(--sklearn-color-fitted-level-3);\n",
       "  color: var(--sklearn-color-background);\n",
       "  text-decoration: none;\n",
       "}\n",
       "\n",
       "/* Span, style for the box shown on hovering the info icon */\n",
       ".sk-estimator-doc-link span {\n",
       "  display: none;\n",
       "  z-index: 9999;\n",
       "  position: relative;\n",
       "  font-weight: normal;\n",
       "  right: .2ex;\n",
       "  padding: .5ex;\n",
       "  margin: .5ex;\n",
       "  width: min-content;\n",
       "  min-width: 20ex;\n",
       "  max-width: 50ex;\n",
       "  color: var(--sklearn-color-text);\n",
       "  box-shadow: 2pt 2pt 4pt #999;\n",
       "  /* unfitted */\n",
       "  background: var(--sklearn-color-unfitted-level-0);\n",
       "  border: .5pt solid var(--sklearn-color-unfitted-level-3);\n",
       "}\n",
       "\n",
       ".sk-estimator-doc-link.fitted span {\n",
       "  /* fitted */\n",
       "  background: var(--sklearn-color-fitted-level-0);\n",
       "  border: var(--sklearn-color-fitted-level-3);\n",
       "}\n",
       "\n",
       ".sk-estimator-doc-link:hover span {\n",
       "  display: block;\n",
       "}\n",
       "\n",
       "/* \"?\"-specific style due to the `<a>` HTML tag */\n",
       "\n",
       "#sk-container-id-4 a.estimator_doc_link {\n",
       "  float: right;\n",
       "  font-size: 1rem;\n",
       "  line-height: 1em;\n",
       "  font-family: monospace;\n",
       "  background-color: var(--sklearn-color-background);\n",
       "  border-radius: 1rem;\n",
       "  height: 1rem;\n",
       "  width: 1rem;\n",
       "  text-decoration: none;\n",
       "  /* unfitted */\n",
       "  color: var(--sklearn-color-unfitted-level-1);\n",
       "  border: var(--sklearn-color-unfitted-level-1) 1pt solid;\n",
       "}\n",
       "\n",
       "#sk-container-id-4 a.estimator_doc_link.fitted {\n",
       "  /* fitted */\n",
       "  border: var(--sklearn-color-fitted-level-1) 1pt solid;\n",
       "  color: var(--sklearn-color-fitted-level-1);\n",
       "}\n",
       "\n",
       "/* On hover */\n",
       "#sk-container-id-4 a.estimator_doc_link:hover {\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-unfitted-level-3);\n",
       "  color: var(--sklearn-color-background);\n",
       "  text-decoration: none;\n",
       "}\n",
       "\n",
       "#sk-container-id-4 a.estimator_doc_link.fitted:hover {\n",
       "  /* fitted */\n",
       "  background-color: var(--sklearn-color-fitted-level-3);\n",
       "}\n",
       "</style><div id=\"sk-container-id-4\" class=\"sk-top-container\"><div class=\"sk-text-repr-fallback\"><pre>LogisticRegression()</pre><b>In a Jupyter environment, please rerun this cell to show the HTML representation or trust the notebook. <br />On GitHub, the HTML representation is unable to render, please try loading this page with nbviewer.org.</b></div><div class=\"sk-container\" hidden><div class=\"sk-item\"><div class=\"sk-estimator fitted sk-toggleable\"><input class=\"sk-toggleable__control sk-hidden--visually\" id=\"sk-estimator-id-4\" type=\"checkbox\" checked><label for=\"sk-estimator-id-4\" class=\"sk-toggleable__label fitted sk-toggleable__label-arrow\"><div><div>LogisticRegression</div></div><div><a class=\"sk-estimator-doc-link fitted\" rel=\"noreferrer\" target=\"_blank\" href=\"https://scikit-learn.org/1.6/modules/generated/sklearn.linear_model.LogisticRegression.html\">?<span>Documentation for LogisticRegression</span></a><span class=\"sk-estimator-doc-link fitted\">i<span>Fitted</span></span></div></label><div class=\"sk-toggleable__content fitted\"><pre>LogisticRegression()</pre></div> </div></div></div></div>"
      ]
     },
     "execution_count": 77,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "execution_count": 77
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-03-23T08:55:31.548156Z",
     "start_time": "2025-03-23T08:55:31.499268Z"
    }
   },
   "cell_type": "code",
   "source": [
    "from sklearn.model_selection import cross_val_score\n",
    "cv10 = cross_val_score(clf2, X_scaler2, y_train2, cv=10, scoring='accuracy')\n",
    "cv10"
   ],
   "id": "a52e3b4c50ec4ffd",
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([0.81111111, 0.78651685, 0.7752809 , 0.87640449, 0.85393258,\n",
       "       0.80898876, 0.76404494, 0.70786517, 0.75280899, 0.85393258])"
      ]
     },
     "execution_count": 78,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "execution_count": 78
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-03-23T08:55:32.549735Z",
     "start_time": "2025-03-23T08:55:32.545375Z"
    }
   },
   "cell_type": "code",
   "source": "cv10.sum() / 10",
   "id": "f395a7a814be4ca8",
   "outputs": [
    {
     "data": {
      "text/plain": [
       "np.float64(0.7990886392009988)"
      ]
     },
     "execution_count": 79,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "execution_count": 79
  },
  {
   "metadata": {},
   "cell_type": "markdown",
   "source": [
    "***事实证明，没多大作用***\n",
    "\n",
    "Embarked 的加入也不必去尝试了"
   ],
   "id": "764e54aedea920d0"
  },
  {
   "metadata": {},
   "cell_type": "markdown",
   "source": "### 尝试数据分组占比化",
   "id": "3495523c0adc277b"
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-03-23T08:57:24.210568Z",
     "start_time": "2025-03-23T08:57:24.132496Z"
    }
   },
   "cell_type": "code",
   "source": [
    "data3 = pd.concat([\n",
    "    df1['Survived'], \n",
    "    df1['Pclass'].transform(lambda x: pclass.loc[x]['Survival_Rate']), \n",
    "    df1['Sex'].transform(lambda x: sex.loc[x]['Survival_Rate']), \n",
    "    age_layer['Age_Layer'].transform(lambda x: age_.loc[x]['Survival_Rate']), \n",
    "    df1['Family'].transform(lambda x: family.loc[x]['Survival_Rate']), \n",
    "    single_fare_layer['Single_Fare_Layer'].transform(lambda x: single_fare.loc[x]['Survival_Rate'])\n",
    "], axis=1)\n",
    "data3"
   ],
   "id": "a9f0b4ffa689fced",
   "outputs": [
    {
     "data": {
      "text/plain": [
       "     Survived    Pclass       Sex Age_Layer    Family  Single_Fare_Layer\n",
       "0           0  0.242363  0.188908  0.398496  0.552795            0.34901\n",
       "1           1  0.629630  0.742038  0.333333  0.552795            0.34901\n",
       "2           1  0.242363  0.742038  0.398496  0.303538            0.34901\n",
       "3           1  0.629630  0.742038  0.333333  0.552795            0.34901\n",
       "4           0  0.242363  0.188908  0.333333  0.303538            0.34901\n",
       "..        ...       ...       ...       ...       ...                ...\n",
       "886         0  0.472826  0.188908  0.398496  0.303538            0.34901\n",
       "887         1  0.629630  0.742038  0.382609  0.303538            0.34901\n",
       "888         0  0.242363  0.742038  0.398496  0.724138            0.34901\n",
       "889         1  0.629630  0.188908  0.398496  0.303538            0.34901\n",
       "890         0  0.242363  0.188908  0.333333  0.303538            0.34901\n",
       "\n",
       "[891 rows x 6 columns]"
      ],
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Survived</th>\n",
       "      <th>Pclass</th>\n",
       "      <th>Sex</th>\n",
       "      <th>Age_Layer</th>\n",
       "      <th>Family</th>\n",
       "      <th>Single_Fare_Layer</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>0</td>\n",
       "      <td>0.242363</td>\n",
       "      <td>0.188908</td>\n",
       "      <td>0.398496</td>\n",
       "      <td>0.552795</td>\n",
       "      <td>0.34901</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>1</td>\n",
       "      <td>0.629630</td>\n",
       "      <td>0.742038</td>\n",
       "      <td>0.333333</td>\n",
       "      <td>0.552795</td>\n",
       "      <td>0.34901</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>1</td>\n",
       "      <td>0.242363</td>\n",
       "      <td>0.742038</td>\n",
       "      <td>0.398496</td>\n",
       "      <td>0.303538</td>\n",
       "      <td>0.34901</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>1</td>\n",
       "      <td>0.629630</td>\n",
       "      <td>0.742038</td>\n",
       "      <td>0.333333</td>\n",
       "      <td>0.552795</td>\n",
       "      <td>0.34901</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>0</td>\n",
       "      <td>0.242363</td>\n",
       "      <td>0.188908</td>\n",
       "      <td>0.333333</td>\n",
       "      <td>0.303538</td>\n",
       "      <td>0.34901</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>...</th>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>886</th>\n",
       "      <td>0</td>\n",
       "      <td>0.472826</td>\n",
       "      <td>0.188908</td>\n",
       "      <td>0.398496</td>\n",
       "      <td>0.303538</td>\n",
       "      <td>0.34901</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>887</th>\n",
       "      <td>1</td>\n",
       "      <td>0.629630</td>\n",
       "      <td>0.742038</td>\n",
       "      <td>0.382609</td>\n",
       "      <td>0.303538</td>\n",
       "      <td>0.34901</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>888</th>\n",
       "      <td>0</td>\n",
       "      <td>0.242363</td>\n",
       "      <td>0.742038</td>\n",
       "      <td>0.398496</td>\n",
       "      <td>0.724138</td>\n",
       "      <td>0.34901</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>889</th>\n",
       "      <td>1</td>\n",
       "      <td>0.629630</td>\n",
       "      <td>0.188908</td>\n",
       "      <td>0.398496</td>\n",
       "      <td>0.303538</td>\n",
       "      <td>0.34901</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>890</th>\n",
       "      <td>0</td>\n",
       "      <td>0.242363</td>\n",
       "      <td>0.188908</td>\n",
       "      <td>0.333333</td>\n",
       "      <td>0.303538</td>\n",
       "      <td>0.34901</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>891 rows × 6 columns</p>\n",
       "</div>"
      ]
     },
     "execution_count": 80,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "execution_count": 80
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-03-23T08:57:55.115993Z",
     "start_time": "2025-03-23T08:57:55.106007Z"
    }
   },
   "cell_type": "code",
   "source": [
    "data_shuffle3 = data3.sample(frac=1).reset_index(drop=True)\n",
    "data_shuffle3"
   ],
   "id": "dbeaa8691ee22ccb",
   "outputs": [
    {
     "data": {
      "text/plain": [
       "     Survived    Pclass       Sex Age_Layer    Family  Single_Fare_Layer\n",
       "0           0  0.472826  0.188908  0.398496  0.303538            0.34901\n",
       "1           0  0.629630  0.188908  0.379310  0.552795            0.34901\n",
       "2           0  0.242363  0.188908  0.333333  0.578431            0.34901\n",
       "3           1  0.472826  0.742038  0.398496  0.303538            0.34901\n",
       "4           0  0.242363  0.188908  0.333333  0.303538            0.34901\n",
       "..        ...       ...       ...       ...       ...                ...\n",
       "886         1  0.472826  0.742038  0.379310  0.303538            0.34901\n",
       "887         0  0.242363  0.188908  0.343750  0.303538            0.34901\n",
       "888         1  0.242363  0.742038  0.398496  0.303538            0.34901\n",
       "889         0  0.242363  0.188908  0.333333  0.552795            0.34901\n",
       "890         0  0.472826  0.742038  0.333333  0.303538            0.34901\n",
       "\n",
       "[891 rows x 6 columns]"
      ],
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Survived</th>\n",
       "      <th>Pclass</th>\n",
       "      <th>Sex</th>\n",
       "      <th>Age_Layer</th>\n",
       "      <th>Family</th>\n",
       "      <th>Single_Fare_Layer</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>0</td>\n",
       "      <td>0.472826</td>\n",
       "      <td>0.188908</td>\n",
       "      <td>0.398496</td>\n",
       "      <td>0.303538</td>\n",
       "      <td>0.34901</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>0</td>\n",
       "      <td>0.629630</td>\n",
       "      <td>0.188908</td>\n",
       "      <td>0.379310</td>\n",
       "      <td>0.552795</td>\n",
       "      <td>0.34901</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>0</td>\n",
       "      <td>0.242363</td>\n",
       "      <td>0.188908</td>\n",
       "      <td>0.333333</td>\n",
       "      <td>0.578431</td>\n",
       "      <td>0.34901</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>1</td>\n",
       "      <td>0.472826</td>\n",
       "      <td>0.742038</td>\n",
       "      <td>0.398496</td>\n",
       "      <td>0.303538</td>\n",
       "      <td>0.34901</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>0</td>\n",
       "      <td>0.242363</td>\n",
       "      <td>0.188908</td>\n",
       "      <td>0.333333</td>\n",
       "      <td>0.303538</td>\n",
       "      <td>0.34901</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>...</th>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>886</th>\n",
       "      <td>1</td>\n",
       "      <td>0.472826</td>\n",
       "      <td>0.742038</td>\n",
       "      <td>0.379310</td>\n",
       "      <td>0.303538</td>\n",
       "      <td>0.34901</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>887</th>\n",
       "      <td>0</td>\n",
       "      <td>0.242363</td>\n",
       "      <td>0.188908</td>\n",
       "      <td>0.343750</td>\n",
       "      <td>0.303538</td>\n",
       "      <td>0.34901</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>888</th>\n",
       "      <td>1</td>\n",
       "      <td>0.242363</td>\n",
       "      <td>0.742038</td>\n",
       "      <td>0.398496</td>\n",
       "      <td>0.303538</td>\n",
       "      <td>0.34901</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>889</th>\n",
       "      <td>0</td>\n",
       "      <td>0.242363</td>\n",
       "      <td>0.188908</td>\n",
       "      <td>0.333333</td>\n",
       "      <td>0.552795</td>\n",
       "      <td>0.34901</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>890</th>\n",
       "      <td>0</td>\n",
       "      <td>0.472826</td>\n",
       "      <td>0.742038</td>\n",
       "      <td>0.333333</td>\n",
       "      <td>0.303538</td>\n",
       "      <td>0.34901</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>891 rows × 6 columns</p>\n",
       "</div>"
      ]
     },
     "execution_count": 86,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "execution_count": 86
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-03-23T08:57:55.961865Z",
     "start_time": "2025-03-23T08:57:55.957847Z"
    }
   },
   "cell_type": "code",
   "source": [
    "X_train3 = data_shuffle3[['Pclass', 'Sex', 'Age_Layer', 'Family', 'Single_Fare_Layer']]\n",
    "y_train3 = data_shuffle3['Survived']"
   ],
   "id": "4f110b47069f67ee",
   "outputs": [],
   "execution_count": 87
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-03-23T08:57:56.683346Z",
     "start_time": "2025-03-23T08:57:56.676484Z"
    }
   },
   "cell_type": "code",
   "source": [
    "from sklearn.linear_model import LogisticRegression\n",
    "clf3 = LogisticRegression().fit(X_train3, y_train3)\n",
    "clf3"
   ],
   "id": "69a8e25d2dcfe587",
   "outputs": [
    {
     "data": {
      "text/plain": [
       "LogisticRegression()"
      ],
      "text/html": [
       "<style>#sk-container-id-6 {\n",
       "  /* Definition of color scheme common for light and dark mode */\n",
       "  --sklearn-color-text: #000;\n",
       "  --sklearn-color-text-muted: #666;\n",
       "  --sklearn-color-line: gray;\n",
       "  /* Definition of color scheme for unfitted estimators */\n",
       "  --sklearn-color-unfitted-level-0: #fff5e6;\n",
       "  --sklearn-color-unfitted-level-1: #f6e4d2;\n",
       "  --sklearn-color-unfitted-level-2: #ffe0b3;\n",
       "  --sklearn-color-unfitted-level-3: chocolate;\n",
       "  /* Definition of color scheme for fitted estimators */\n",
       "  --sklearn-color-fitted-level-0: #f0f8ff;\n",
       "  --sklearn-color-fitted-level-1: #d4ebff;\n",
       "  --sklearn-color-fitted-level-2: #b3dbfd;\n",
       "  --sklearn-color-fitted-level-3: cornflowerblue;\n",
       "\n",
       "  /* Specific color for light theme */\n",
       "  --sklearn-color-text-on-default-background: var(--sg-text-color, var(--theme-code-foreground, var(--jp-content-font-color1, black)));\n",
       "  --sklearn-color-background: var(--sg-background-color, var(--theme-background, var(--jp-layout-color0, white)));\n",
       "  --sklearn-color-border-box: var(--sg-text-color, var(--theme-code-foreground, var(--jp-content-font-color1, black)));\n",
       "  --sklearn-color-icon: #696969;\n",
       "\n",
       "  @media (prefers-color-scheme: dark) {\n",
       "    /* Redefinition of color scheme for dark theme */\n",
       "    --sklearn-color-text-on-default-background: var(--sg-text-color, var(--theme-code-foreground, var(--jp-content-font-color1, white)));\n",
       "    --sklearn-color-background: var(--sg-background-color, var(--theme-background, var(--jp-layout-color0, #111)));\n",
       "    --sklearn-color-border-box: var(--sg-text-color, var(--theme-code-foreground, var(--jp-content-font-color1, white)));\n",
       "    --sklearn-color-icon: #878787;\n",
       "  }\n",
       "}\n",
       "\n",
       "#sk-container-id-6 {\n",
       "  color: var(--sklearn-color-text);\n",
       "}\n",
       "\n",
       "#sk-container-id-6 pre {\n",
       "  padding: 0;\n",
       "}\n",
       "\n",
       "#sk-container-id-6 input.sk-hidden--visually {\n",
       "  border: 0;\n",
       "  clip: rect(1px 1px 1px 1px);\n",
       "  clip: rect(1px, 1px, 1px, 1px);\n",
       "  height: 1px;\n",
       "  margin: -1px;\n",
       "  overflow: hidden;\n",
       "  padding: 0;\n",
       "  position: absolute;\n",
       "  width: 1px;\n",
       "}\n",
       "\n",
       "#sk-container-id-6 div.sk-dashed-wrapped {\n",
       "  border: 1px dashed var(--sklearn-color-line);\n",
       "  margin: 0 0.4em 0.5em 0.4em;\n",
       "  box-sizing: border-box;\n",
       "  padding-bottom: 0.4em;\n",
       "  background-color: var(--sklearn-color-background);\n",
       "}\n",
       "\n",
       "#sk-container-id-6 div.sk-container {\n",
       "  /* jupyter's `normalize.less` sets `[hidden] { display: none; }`\n",
       "     but bootstrap.min.css set `[hidden] { display: none !important; }`\n",
       "     so we also need the `!important` here to be able to override the\n",
       "     default hidden behavior on the sphinx rendered scikit-learn.org.\n",
       "     See: https://github.com/scikit-learn/scikit-learn/issues/21755 */\n",
       "  display: inline-block !important;\n",
       "  position: relative;\n",
       "}\n",
       "\n",
       "#sk-container-id-6 div.sk-text-repr-fallback {\n",
       "  display: none;\n",
       "}\n",
       "\n",
       "div.sk-parallel-item,\n",
       "div.sk-serial,\n",
       "div.sk-item {\n",
       "  /* draw centered vertical line to link estimators */\n",
       "  background-image: linear-gradient(var(--sklearn-color-text-on-default-background), var(--sklearn-color-text-on-default-background));\n",
       "  background-size: 2px 100%;\n",
       "  background-repeat: no-repeat;\n",
       "  background-position: center center;\n",
       "}\n",
       "\n",
       "/* Parallel-specific style estimator block */\n",
       "\n",
       "#sk-container-id-6 div.sk-parallel-item::after {\n",
       "  content: \"\";\n",
       "  width: 100%;\n",
       "  border-bottom: 2px solid var(--sklearn-color-text-on-default-background);\n",
       "  flex-grow: 1;\n",
       "}\n",
       "\n",
       "#sk-container-id-6 div.sk-parallel {\n",
       "  display: flex;\n",
       "  align-items: stretch;\n",
       "  justify-content: center;\n",
       "  background-color: var(--sklearn-color-background);\n",
       "  position: relative;\n",
       "}\n",
       "\n",
       "#sk-container-id-6 div.sk-parallel-item {\n",
       "  display: flex;\n",
       "  flex-direction: column;\n",
       "}\n",
       "\n",
       "#sk-container-id-6 div.sk-parallel-item:first-child::after {\n",
       "  align-self: flex-end;\n",
       "  width: 50%;\n",
       "}\n",
       "\n",
       "#sk-container-id-6 div.sk-parallel-item:last-child::after {\n",
       "  align-self: flex-start;\n",
       "  width: 50%;\n",
       "}\n",
       "\n",
       "#sk-container-id-6 div.sk-parallel-item:only-child::after {\n",
       "  width: 0;\n",
       "}\n",
       "\n",
       "/* Serial-specific style estimator block */\n",
       "\n",
       "#sk-container-id-6 div.sk-serial {\n",
       "  display: flex;\n",
       "  flex-direction: column;\n",
       "  align-items: center;\n",
       "  background-color: var(--sklearn-color-background);\n",
       "  padding-right: 1em;\n",
       "  padding-left: 1em;\n",
       "}\n",
       "\n",
       "\n",
       "/* Toggleable style: style used for estimator/Pipeline/ColumnTransformer box that is\n",
       "clickable and can be expanded/collapsed.\n",
       "- Pipeline and ColumnTransformer use this feature and define the default style\n",
       "- Estimators will overwrite some part of the style using the `sk-estimator` class\n",
       "*/\n",
       "\n",
       "/* Pipeline and ColumnTransformer style (default) */\n",
       "\n",
       "#sk-container-id-6 div.sk-toggleable {\n",
       "  /* Default theme specific background. It is overwritten whether we have a\n",
       "  specific estimator or a Pipeline/ColumnTransformer */\n",
       "  background-color: var(--sklearn-color-background);\n",
       "}\n",
       "\n",
       "/* Toggleable label */\n",
       "#sk-container-id-6 label.sk-toggleable__label {\n",
       "  cursor: pointer;\n",
       "  display: flex;\n",
       "  width: 100%;\n",
       "  margin-bottom: 0;\n",
       "  padding: 0.5em;\n",
       "  box-sizing: border-box;\n",
       "  text-align: center;\n",
       "  align-items: start;\n",
       "  justify-content: space-between;\n",
       "  gap: 0.5em;\n",
       "}\n",
       "\n",
       "#sk-container-id-6 label.sk-toggleable__label .caption {\n",
       "  font-size: 0.6rem;\n",
       "  font-weight: lighter;\n",
       "  color: var(--sklearn-color-text-muted);\n",
       "}\n",
       "\n",
       "#sk-container-id-6 label.sk-toggleable__label-arrow:before {\n",
       "  /* Arrow on the left of the label */\n",
       "  content: \"▸\";\n",
       "  float: left;\n",
       "  margin-right: 0.25em;\n",
       "  color: var(--sklearn-color-icon);\n",
       "}\n",
       "\n",
       "#sk-container-id-6 label.sk-toggleable__label-arrow:hover:before {\n",
       "  color: var(--sklearn-color-text);\n",
       "}\n",
       "\n",
       "/* Toggleable content - dropdown */\n",
       "\n",
       "#sk-container-id-6 div.sk-toggleable__content {\n",
       "  max-height: 0;\n",
       "  max-width: 0;\n",
       "  overflow: hidden;\n",
       "  text-align: left;\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-unfitted-level-0);\n",
       "}\n",
       "\n",
       "#sk-container-id-6 div.sk-toggleable__content.fitted {\n",
       "  /* fitted */\n",
       "  background-color: var(--sklearn-color-fitted-level-0);\n",
       "}\n",
       "\n",
       "#sk-container-id-6 div.sk-toggleable__content pre {\n",
       "  margin: 0.2em;\n",
       "  border-radius: 0.25em;\n",
       "  color: var(--sklearn-color-text);\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-unfitted-level-0);\n",
       "}\n",
       "\n",
       "#sk-container-id-6 div.sk-toggleable__content.fitted pre {\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-fitted-level-0);\n",
       "}\n",
       "\n",
       "#sk-container-id-6 input.sk-toggleable__control:checked~div.sk-toggleable__content {\n",
       "  /* Expand drop-down */\n",
       "  max-height: 200px;\n",
       "  max-width: 100%;\n",
       "  overflow: auto;\n",
       "}\n",
       "\n",
       "#sk-container-id-6 input.sk-toggleable__control:checked~label.sk-toggleable__label-arrow:before {\n",
       "  content: \"▾\";\n",
       "}\n",
       "\n",
       "/* Pipeline/ColumnTransformer-specific style */\n",
       "\n",
       "#sk-container-id-6 div.sk-label input.sk-toggleable__control:checked~label.sk-toggleable__label {\n",
       "  color: var(--sklearn-color-text);\n",
       "  background-color: var(--sklearn-color-unfitted-level-2);\n",
       "}\n",
       "\n",
       "#sk-container-id-6 div.sk-label.fitted input.sk-toggleable__control:checked~label.sk-toggleable__label {\n",
       "  background-color: var(--sklearn-color-fitted-level-2);\n",
       "}\n",
       "\n",
       "/* Estimator-specific style */\n",
       "\n",
       "/* Colorize estimator box */\n",
       "#sk-container-id-6 div.sk-estimator input.sk-toggleable__control:checked~label.sk-toggleable__label {\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-unfitted-level-2);\n",
       "}\n",
       "\n",
       "#sk-container-id-6 div.sk-estimator.fitted input.sk-toggleable__control:checked~label.sk-toggleable__label {\n",
       "  /* fitted */\n",
       "  background-color: var(--sklearn-color-fitted-level-2);\n",
       "}\n",
       "\n",
       "#sk-container-id-6 div.sk-label label.sk-toggleable__label,\n",
       "#sk-container-id-6 div.sk-label label {\n",
       "  /* The background is the default theme color */\n",
       "  color: var(--sklearn-color-text-on-default-background);\n",
       "}\n",
       "\n",
       "/* On hover, darken the color of the background */\n",
       "#sk-container-id-6 div.sk-label:hover label.sk-toggleable__label {\n",
       "  color: var(--sklearn-color-text);\n",
       "  background-color: var(--sklearn-color-unfitted-level-2);\n",
       "}\n",
       "\n",
       "/* Label box, darken color on hover, fitted */\n",
       "#sk-container-id-6 div.sk-label.fitted:hover label.sk-toggleable__label.fitted {\n",
       "  color: var(--sklearn-color-text);\n",
       "  background-color: var(--sklearn-color-fitted-level-2);\n",
       "}\n",
       "\n",
       "/* Estimator label */\n",
       "\n",
       "#sk-container-id-6 div.sk-label label {\n",
       "  font-family: monospace;\n",
       "  font-weight: bold;\n",
       "  display: inline-block;\n",
       "  line-height: 1.2em;\n",
       "}\n",
       "\n",
       "#sk-container-id-6 div.sk-label-container {\n",
       "  text-align: center;\n",
       "}\n",
       "\n",
       "/* Estimator-specific */\n",
       "#sk-container-id-6 div.sk-estimator {\n",
       "  font-family: monospace;\n",
       "  border: 1px dotted var(--sklearn-color-border-box);\n",
       "  border-radius: 0.25em;\n",
       "  box-sizing: border-box;\n",
       "  margin-bottom: 0.5em;\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-unfitted-level-0);\n",
       "}\n",
       "\n",
       "#sk-container-id-6 div.sk-estimator.fitted {\n",
       "  /* fitted */\n",
       "  background-color: var(--sklearn-color-fitted-level-0);\n",
       "}\n",
       "\n",
       "/* on hover */\n",
       "#sk-container-id-6 div.sk-estimator:hover {\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-unfitted-level-2);\n",
       "}\n",
       "\n",
       "#sk-container-id-6 div.sk-estimator.fitted:hover {\n",
       "  /* fitted */\n",
       "  background-color: var(--sklearn-color-fitted-level-2);\n",
       "}\n",
       "\n",
       "/* Specification for estimator info (e.g. \"i\" and \"?\") */\n",
       "\n",
       "/* Common style for \"i\" and \"?\" */\n",
       "\n",
       ".sk-estimator-doc-link,\n",
       "a:link.sk-estimator-doc-link,\n",
       "a:visited.sk-estimator-doc-link {\n",
       "  float: right;\n",
       "  font-size: smaller;\n",
       "  line-height: 1em;\n",
       "  font-family: monospace;\n",
       "  background-color: var(--sklearn-color-background);\n",
       "  border-radius: 1em;\n",
       "  height: 1em;\n",
       "  width: 1em;\n",
       "  text-decoration: none !important;\n",
       "  margin-left: 0.5em;\n",
       "  text-align: center;\n",
       "  /* unfitted */\n",
       "  border: var(--sklearn-color-unfitted-level-1) 1pt solid;\n",
       "  color: var(--sklearn-color-unfitted-level-1);\n",
       "}\n",
       "\n",
       ".sk-estimator-doc-link.fitted,\n",
       "a:link.sk-estimator-doc-link.fitted,\n",
       "a:visited.sk-estimator-doc-link.fitted {\n",
       "  /* fitted */\n",
       "  border: var(--sklearn-color-fitted-level-1) 1pt solid;\n",
       "  color: var(--sklearn-color-fitted-level-1);\n",
       "}\n",
       "\n",
       "/* On hover */\n",
       "div.sk-estimator:hover .sk-estimator-doc-link:hover,\n",
       ".sk-estimator-doc-link:hover,\n",
       "div.sk-label-container:hover .sk-estimator-doc-link:hover,\n",
       ".sk-estimator-doc-link:hover {\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-unfitted-level-3);\n",
       "  color: var(--sklearn-color-background);\n",
       "  text-decoration: none;\n",
       "}\n",
       "\n",
       "div.sk-estimator.fitted:hover .sk-estimator-doc-link.fitted:hover,\n",
       ".sk-estimator-doc-link.fitted:hover,\n",
       "div.sk-label-container:hover .sk-estimator-doc-link.fitted:hover,\n",
       ".sk-estimator-doc-link.fitted:hover {\n",
       "  /* fitted */\n",
       "  background-color: var(--sklearn-color-fitted-level-3);\n",
       "  color: var(--sklearn-color-background);\n",
       "  text-decoration: none;\n",
       "}\n",
       "\n",
       "/* Span, style for the box shown on hovering the info icon */\n",
       ".sk-estimator-doc-link span {\n",
       "  display: none;\n",
       "  z-index: 9999;\n",
       "  position: relative;\n",
       "  font-weight: normal;\n",
       "  right: .2ex;\n",
       "  padding: .5ex;\n",
       "  margin: .5ex;\n",
       "  width: min-content;\n",
       "  min-width: 20ex;\n",
       "  max-width: 50ex;\n",
       "  color: var(--sklearn-color-text);\n",
       "  box-shadow: 2pt 2pt 4pt #999;\n",
       "  /* unfitted */\n",
       "  background: var(--sklearn-color-unfitted-level-0);\n",
       "  border: .5pt solid var(--sklearn-color-unfitted-level-3);\n",
       "}\n",
       "\n",
       ".sk-estimator-doc-link.fitted span {\n",
       "  /* fitted */\n",
       "  background: var(--sklearn-color-fitted-level-0);\n",
       "  border: var(--sklearn-color-fitted-level-3);\n",
       "}\n",
       "\n",
       ".sk-estimator-doc-link:hover span {\n",
       "  display: block;\n",
       "}\n",
       "\n",
       "/* \"?\"-specific style due to the `<a>` HTML tag */\n",
       "\n",
       "#sk-container-id-6 a.estimator_doc_link {\n",
       "  float: right;\n",
       "  font-size: 1rem;\n",
       "  line-height: 1em;\n",
       "  font-family: monospace;\n",
       "  background-color: var(--sklearn-color-background);\n",
       "  border-radius: 1rem;\n",
       "  height: 1rem;\n",
       "  width: 1rem;\n",
       "  text-decoration: none;\n",
       "  /* unfitted */\n",
       "  color: var(--sklearn-color-unfitted-level-1);\n",
       "  border: var(--sklearn-color-unfitted-level-1) 1pt solid;\n",
       "}\n",
       "\n",
       "#sk-container-id-6 a.estimator_doc_link.fitted {\n",
       "  /* fitted */\n",
       "  border: var(--sklearn-color-fitted-level-1) 1pt solid;\n",
       "  color: var(--sklearn-color-fitted-level-1);\n",
       "}\n",
       "\n",
       "/* On hover */\n",
       "#sk-container-id-6 a.estimator_doc_link:hover {\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-unfitted-level-3);\n",
       "  color: var(--sklearn-color-background);\n",
       "  text-decoration: none;\n",
       "}\n",
       "\n",
       "#sk-container-id-6 a.estimator_doc_link.fitted:hover {\n",
       "  /* fitted */\n",
       "  background-color: var(--sklearn-color-fitted-level-3);\n",
       "}\n",
       "</style><div id=\"sk-container-id-6\" class=\"sk-top-container\"><div class=\"sk-text-repr-fallback\"><pre>LogisticRegression()</pre><b>In a Jupyter environment, please rerun this cell to show the HTML representation or trust the notebook. <br />On GitHub, the HTML representation is unable to render, please try loading this page with nbviewer.org.</b></div><div class=\"sk-container\" hidden><div class=\"sk-item\"><div class=\"sk-estimator fitted sk-toggleable\"><input class=\"sk-toggleable__control sk-hidden--visually\" id=\"sk-estimator-id-6\" type=\"checkbox\" checked><label for=\"sk-estimator-id-6\" class=\"sk-toggleable__label fitted sk-toggleable__label-arrow\"><div><div>LogisticRegression</div></div><div><a class=\"sk-estimator-doc-link fitted\" rel=\"noreferrer\" target=\"_blank\" href=\"https://scikit-learn.org/1.6/modules/generated/sklearn.linear_model.LogisticRegression.html\">?<span>Documentation for LogisticRegression</span></a><span class=\"sk-estimator-doc-link fitted\">i<span>Fitted</span></span></div></label><div class=\"sk-toggleable__content fitted\"><pre>LogisticRegression()</pre></div> </div></div></div></div>"
      ]
     },
     "execution_count": 88,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "execution_count": 88
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-03-23T08:57:57.409070Z",
     "start_time": "2025-03-23T08:57:57.369365Z"
    }
   },
   "cell_type": "code",
   "source": [
    "from sklearn.model_selection import cross_val_score\n",
    "cv10 = cross_val_score(clf3, X_train3, y_train3, cv=10, scoring='accuracy')\n",
    "cv10"
   ],
   "id": "b651a258bf22494",
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([0.82222222, 0.80898876, 0.87640449, 0.75280899, 0.79775281,\n",
       "       0.85393258, 0.76404494, 0.80898876, 0.7752809 , 0.80898876])"
      ]
     },
     "execution_count": 89,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "execution_count": 89
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-03-23T08:57:58.815600Z",
     "start_time": "2025-03-23T08:57:58.810019Z"
    }
   },
   "cell_type": "code",
   "source": "cv10.sum() / 10",
   "id": "890dcb7b1047a0de",
   "outputs": [
    {
     "data": {
      "text/plain": [
       "np.float64(0.8069413233458176)"
      ]
     },
     "execution_count": 90,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "execution_count": 90
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-03-23T08:58:06.247819Z",
     "start_time": "2025-03-23T08:58:06.244120Z"
    }
   },
   "cell_type": "code",
   "source": "y_pred3 = clf3.predict(X_train3)",
   "id": "cc3be90a2937eead",
   "outputs": [],
   "execution_count": 91
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-03-23T08:58:06.830759Z",
     "start_time": "2025-03-23T08:58:06.825565Z"
    }
   },
   "cell_type": "code",
   "source": [
    "from sklearn.metrics import confusion_matrix, classification_report\n",
    "confusion_matrix(y_train3, y_pred3)"
   ],
   "id": "a47561071a1b5333",
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[477,  72],\n",
       "       [ 99, 243]])"
      ]
     },
     "execution_count": 92,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "execution_count": 92
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-03-23T08:58:08.007268Z",
     "start_time": "2025-03-23T08:58:07.994946Z"
    }
   },
   "cell_type": "code",
   "source": "print(classification_report(y_train3, y_pred3))",
   "id": "c85b382fbb65dfc",
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "              precision    recall  f1-score   support\n",
      "\n",
      "           0       0.83      0.87      0.85       549\n",
      "           1       0.77      0.71      0.74       342\n",
      "\n",
      "    accuracy                           0.81       891\n",
      "   macro avg       0.80      0.79      0.79       891\n",
      "weighted avg       0.81      0.81      0.81       891\n",
      "\n"
     ]
    }
   ],
   "execution_count": 93
  },
  {
   "metadata": {},
   "cell_type": "markdown",
   "source": "***好像也没多大作用，准确率就增加了 1%***",
   "id": "a88b9d63d2fe15c"
  },
  {
   "metadata": {},
   "cell_type": "markdown",
   "source": "### 尝试加入 Ticket | Fare | Embarked",
   "id": "bf2c8a2ade1f7cb0"
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-03-23T08:59:22.409876Z",
     "start_time": "2025-03-23T08:59:22.398012Z"
    }
   },
   "cell_type": "code",
   "source": [
    "fare_layer = df1[['Fare', 'Survived']].copy()\n",
    "bins = np.linspace(-10, 520, 11)\n",
    "fare_layer['Fare_Layer'] = pd.cut(fare_layer['Fare'], bins=bins)\n",
    "fare = fare_layer.groupby('Fare_Layer', observed=False).agg({'Survived': 'sum', 'Fare_Layer': 'count'})\n",
    "fare['Survival_Rate'] = fare['Survived'] / fare['Fare_Layer']\n",
    "fare"
   ],
   "id": "bf2bce6b5f7f0263",
   "outputs": [
    {
     "data": {
      "text/plain": [
       "                Survived  Fare_Layer  Survival_Rate\n",
       "Fare_Layer                                         \n",
       "(-10.0, 43.0]        231         720       0.320833\n",
       "(43.0, 96.0]          72         118       0.610169\n",
       "(96.0, 149.0]         19          24       0.791667\n",
       "(149.0, 202.0]         6           9       0.666667\n",
       "(202.0, 255.0]         7          11       0.636364\n",
       "(255.0, 308.0]         4           6       0.666667\n",
       "(308.0, 361.0]         0           0            NaN\n",
       "(361.0, 414.0]         0           0            NaN\n",
       "(414.0, 467.0]         0           0            NaN\n",
       "(467.0, 520.0]         3           3       1.000000"
      ],
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Survived</th>\n",
       "      <th>Fare_Layer</th>\n",
       "      <th>Survival_Rate</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Fare_Layer</th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>(-10.0, 43.0]</th>\n",
       "      <td>231</td>\n",
       "      <td>720</td>\n",
       "      <td>0.320833</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>(43.0, 96.0]</th>\n",
       "      <td>72</td>\n",
       "      <td>118</td>\n",
       "      <td>0.610169</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>(96.0, 149.0]</th>\n",
       "      <td>19</td>\n",
       "      <td>24</td>\n",
       "      <td>0.791667</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>(149.0, 202.0]</th>\n",
       "      <td>6</td>\n",
       "      <td>9</td>\n",
       "      <td>0.666667</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>(202.0, 255.0]</th>\n",
       "      <td>7</td>\n",
       "      <td>11</td>\n",
       "      <td>0.636364</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>(255.0, 308.0]</th>\n",
       "      <td>4</td>\n",
       "      <td>6</td>\n",
       "      <td>0.666667</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>(308.0, 361.0]</th>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>(361.0, 414.0]</th>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>(414.0, 467.0]</th>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>(467.0, 520.0]</th>\n",
       "      <td>3</td>\n",
       "      <td>3</td>\n",
       "      <td>1.000000</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ]
     },
     "execution_count": 94,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "execution_count": 94
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-03-23T08:59:26.536261Z",
     "start_time": "2025-03-23T08:59:26.436768Z"
    }
   },
   "cell_type": "code",
   "source": [
    "data4 = pd.concat([\n",
    "    df1['Survived'], \n",
    "    df1['Pclass'].transform(lambda x: pclass.loc[x]['Survival_Rate']), \n",
    "    df1['Sex'].transform(lambda x: sex.loc[x]['Survival_Rate']), \n",
    "    age_layer['Age_Layer'].transform(lambda x: age_.loc[x]['Survival_Rate']), \n",
    "    df1['Family'].transform(lambda x: family.loc[x]['Survival_Rate']), \n",
    "    single_fare_layer['Single_Fare_Layer'].transform(lambda x: single_fare.loc[x]['Survival_Rate']), \n",
    "    ticket['Ticket_layer'].transform(lambda x: ticket_.loc[x]['Survival_Rate']), \n",
    "    fare_layer['Fare_Layer'].transform(lambda x: fare.loc[x]['Survival_Rate']), \n",
    "    df1['Embarked'].transform(lambda x: embarked.loc[x]['Survival_Rate']), \n",
    "], axis=1)\n",
    "data4"
   ],
   "id": "f7b30c675061ac2b",
   "outputs": [
    {
     "data": {
      "text/plain": [
       "     Survived    Pclass       Sex Age_Layer    Family  Single_Fare_Layer  \\\n",
       "0           0  0.242363  0.188908  0.398496  0.552795            0.34901   \n",
       "1           1  0.629630  0.742038  0.333333  0.552795            0.34901   \n",
       "2           1  0.242363  0.742038  0.398496  0.303538            0.34901   \n",
       "3           1  0.629630  0.742038  0.333333  0.552795            0.34901   \n",
       "4           0  0.242363  0.188908  0.333333  0.303538            0.34901   \n",
       "..        ...       ...       ...       ...       ...                ...   \n",
       "886         0  0.472826  0.188908  0.398496  0.303538            0.34901   \n",
       "887         1  0.629630  0.742038  0.382609  0.303538            0.34901   \n",
       "888         0  0.242363  0.742038  0.398496  0.724138            0.34901   \n",
       "889         1  0.629630  0.188908  0.398496  0.303538            0.34901   \n",
       "890         0  0.242363  0.188908  0.333333  0.303538            0.34901   \n",
       "\n",
       "     Ticket_layer  Fare_Layer  Embarked  \n",
       "0        0.377778    0.320833  0.336957  \n",
       "1        0.651007    0.610169  0.558824  \n",
       "2        0.272727    0.320833  0.336957  \n",
       "3        0.513889    0.610169  0.336957  \n",
       "4        0.240000    0.320833  0.336957  \n",
       "..            ...         ...       ...  \n",
       "886      0.000000    0.320833  0.336957  \n",
       "887      0.513889    0.320833  0.336957  \n",
       "888      0.316092    0.320833  0.336957  \n",
       "889      0.513889    0.320833  0.558824  \n",
       "890      0.240000    0.320833  0.389610  \n",
       "\n",
       "[891 rows x 9 columns]"
      ],
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Survived</th>\n",
       "      <th>Pclass</th>\n",
       "      <th>Sex</th>\n",
       "      <th>Age_Layer</th>\n",
       "      <th>Family</th>\n",
       "      <th>Single_Fare_Layer</th>\n",
       "      <th>Ticket_layer</th>\n",
       "      <th>Fare_Layer</th>\n",
       "      <th>Embarked</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>0</td>\n",
       "      <td>0.242363</td>\n",
       "      <td>0.188908</td>\n",
       "      <td>0.398496</td>\n",
       "      <td>0.552795</td>\n",
       "      <td>0.34901</td>\n",
       "      <td>0.377778</td>\n",
       "      <td>0.320833</td>\n",
       "      <td>0.336957</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>1</td>\n",
       "      <td>0.629630</td>\n",
       "      <td>0.742038</td>\n",
       "      <td>0.333333</td>\n",
       "      <td>0.552795</td>\n",
       "      <td>0.34901</td>\n",
       "      <td>0.651007</td>\n",
       "      <td>0.610169</td>\n",
       "      <td>0.558824</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>1</td>\n",
       "      <td>0.242363</td>\n",
       "      <td>0.742038</td>\n",
       "      <td>0.398496</td>\n",
       "      <td>0.303538</td>\n",
       "      <td>0.34901</td>\n",
       "      <td>0.272727</td>\n",
       "      <td>0.320833</td>\n",
       "      <td>0.336957</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>1</td>\n",
       "      <td>0.629630</td>\n",
       "      <td>0.742038</td>\n",
       "      <td>0.333333</td>\n",
       "      <td>0.552795</td>\n",
       "      <td>0.34901</td>\n",
       "      <td>0.513889</td>\n",
       "      <td>0.610169</td>\n",
       "      <td>0.336957</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>0</td>\n",
       "      <td>0.242363</td>\n",
       "      <td>0.188908</td>\n",
       "      <td>0.333333</td>\n",
       "      <td>0.303538</td>\n",
       "      <td>0.34901</td>\n",
       "      <td>0.240000</td>\n",
       "      <td>0.320833</td>\n",
       "      <td>0.336957</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>...</th>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>886</th>\n",
       "      <td>0</td>\n",
       "      <td>0.472826</td>\n",
       "      <td>0.188908</td>\n",
       "      <td>0.398496</td>\n",
       "      <td>0.303538</td>\n",
       "      <td>0.34901</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.320833</td>\n",
       "      <td>0.336957</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>887</th>\n",
       "      <td>1</td>\n",
       "      <td>0.629630</td>\n",
       "      <td>0.742038</td>\n",
       "      <td>0.382609</td>\n",
       "      <td>0.303538</td>\n",
       "      <td>0.34901</td>\n",
       "      <td>0.513889</td>\n",
       "      <td>0.320833</td>\n",
       "      <td>0.336957</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>888</th>\n",
       "      <td>0</td>\n",
       "      <td>0.242363</td>\n",
       "      <td>0.742038</td>\n",
       "      <td>0.398496</td>\n",
       "      <td>0.724138</td>\n",
       "      <td>0.34901</td>\n",
       "      <td>0.316092</td>\n",
       "      <td>0.320833</td>\n",
       "      <td>0.336957</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>889</th>\n",
       "      <td>1</td>\n",
       "      <td>0.629630</td>\n",
       "      <td>0.188908</td>\n",
       "      <td>0.398496</td>\n",
       "      <td>0.303538</td>\n",
       "      <td>0.34901</td>\n",
       "      <td>0.513889</td>\n",
       "      <td>0.320833</td>\n",
       "      <td>0.558824</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>890</th>\n",
       "      <td>0</td>\n",
       "      <td>0.242363</td>\n",
       "      <td>0.188908</td>\n",
       "      <td>0.333333</td>\n",
       "      <td>0.303538</td>\n",
       "      <td>0.34901</td>\n",
       "      <td>0.240000</td>\n",
       "      <td>0.320833</td>\n",
       "      <td>0.389610</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>891 rows × 9 columns</p>\n",
       "</div>"
      ]
     },
     "execution_count": 95,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "execution_count": 95
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-03-23T08:59:29.256917Z",
     "start_time": "2025-03-23T08:59:29.246674Z"
    }
   },
   "cell_type": "code",
   "source": [
    "data_shuffle4 = data4.sample(frac=1).reset_index(drop=True)\n",
    "data_shuffle4"
   ],
   "id": "74a347870926bcdb",
   "outputs": [
    {
     "data": {
      "text/plain": [
       "     Survived    Pclass       Sex Age_Layer    Family  Single_Fare_Layer  \\\n",
       "0           0  0.242363  0.188908  0.333333  0.303538           0.349010   \n",
       "1           0  0.242363  0.188908  0.333333  0.552795           0.349010   \n",
       "2           0  0.472826  0.742038  0.398496  0.303538           0.349010   \n",
       "3           0  0.242363  0.188908  0.398496  0.303538           0.349010   \n",
       "4           0  0.629630  0.188908  0.398496  0.303538           0.688525   \n",
       "..        ...       ...       ...       ...       ...                ...   \n",
       "886         0  0.242363  0.188908  0.398496  0.303538           0.349010   \n",
       "887         1  0.472826  0.188908  0.588235  0.724138           0.349010   \n",
       "888         1  0.472826  0.742038  0.343750  0.200000           0.349010   \n",
       "889         0  0.472826  0.188908  0.333333  0.303538           0.349010   \n",
       "890         1  0.242363  0.742038  0.382609  0.552795           0.349010   \n",
       "\n",
       "     Ticket_layer  Fare_Layer  Embarked  \n",
       "0        0.140625    0.320833  0.336957  \n",
       "1        0.240000    0.320833  0.389610  \n",
       "2        0.500000    0.320833  0.336957  \n",
       "3        0.200000    0.320833  0.336957  \n",
       "4        0.651007    0.610169  0.558824  \n",
       "..            ...         ...       ...  \n",
       "886      0.140625    0.320833  0.336957  \n",
       "887      0.444444    0.320833  0.336957  \n",
       "888      0.377778    0.320833  0.336957  \n",
       "889      0.316092    0.320833  0.336957  \n",
       "890      0.316092    0.320833  0.558824  \n",
       "\n",
       "[891 rows x 9 columns]"
      ],
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Survived</th>\n",
       "      <th>Pclass</th>\n",
       "      <th>Sex</th>\n",
       "      <th>Age_Layer</th>\n",
       "      <th>Family</th>\n",
       "      <th>Single_Fare_Layer</th>\n",
       "      <th>Ticket_layer</th>\n",
       "      <th>Fare_Layer</th>\n",
       "      <th>Embarked</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>0</td>\n",
       "      <td>0.242363</td>\n",
       "      <td>0.188908</td>\n",
       "      <td>0.333333</td>\n",
       "      <td>0.303538</td>\n",
       "      <td>0.349010</td>\n",
       "      <td>0.140625</td>\n",
       "      <td>0.320833</td>\n",
       "      <td>0.336957</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>0</td>\n",
       "      <td>0.242363</td>\n",
       "      <td>0.188908</td>\n",
       "      <td>0.333333</td>\n",
       "      <td>0.552795</td>\n",
       "      <td>0.349010</td>\n",
       "      <td>0.240000</td>\n",
       "      <td>0.320833</td>\n",
       "      <td>0.389610</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>0</td>\n",
       "      <td>0.472826</td>\n",
       "      <td>0.742038</td>\n",
       "      <td>0.398496</td>\n",
       "      <td>0.303538</td>\n",
       "      <td>0.349010</td>\n",
       "      <td>0.500000</td>\n",
       "      <td>0.320833</td>\n",
       "      <td>0.336957</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>0</td>\n",
       "      <td>0.242363</td>\n",
       "      <td>0.188908</td>\n",
       "      <td>0.398496</td>\n",
       "      <td>0.303538</td>\n",
       "      <td>0.349010</td>\n",
       "      <td>0.200000</td>\n",
       "      <td>0.320833</td>\n",
       "      <td>0.336957</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>0</td>\n",
       "      <td>0.629630</td>\n",
       "      <td>0.188908</td>\n",
       "      <td>0.398496</td>\n",
       "      <td>0.303538</td>\n",
       "      <td>0.688525</td>\n",
       "      <td>0.651007</td>\n",
       "      <td>0.610169</td>\n",
       "      <td>0.558824</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>...</th>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>886</th>\n",
       "      <td>0</td>\n",
       "      <td>0.242363</td>\n",
       "      <td>0.188908</td>\n",
       "      <td>0.398496</td>\n",
       "      <td>0.303538</td>\n",
       "      <td>0.349010</td>\n",
       "      <td>0.140625</td>\n",
       "      <td>0.320833</td>\n",
       "      <td>0.336957</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>887</th>\n",
       "      <td>1</td>\n",
       "      <td>0.472826</td>\n",
       "      <td>0.188908</td>\n",
       "      <td>0.588235</td>\n",
       "      <td>0.724138</td>\n",
       "      <td>0.349010</td>\n",
       "      <td>0.444444</td>\n",
       "      <td>0.320833</td>\n",
       "      <td>0.336957</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>888</th>\n",
       "      <td>1</td>\n",
       "      <td>0.472826</td>\n",
       "      <td>0.742038</td>\n",
       "      <td>0.343750</td>\n",
       "      <td>0.200000</td>\n",
       "      <td>0.349010</td>\n",
       "      <td>0.377778</td>\n",
       "      <td>0.320833</td>\n",
       "      <td>0.336957</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>889</th>\n",
       "      <td>0</td>\n",
       "      <td>0.472826</td>\n",
       "      <td>0.188908</td>\n",
       "      <td>0.333333</td>\n",
       "      <td>0.303538</td>\n",
       "      <td>0.349010</td>\n",
       "      <td>0.316092</td>\n",
       "      <td>0.320833</td>\n",
       "      <td>0.336957</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>890</th>\n",
       "      <td>1</td>\n",
       "      <td>0.242363</td>\n",
       "      <td>0.742038</td>\n",
       "      <td>0.382609</td>\n",
       "      <td>0.552795</td>\n",
       "      <td>0.349010</td>\n",
       "      <td>0.316092</td>\n",
       "      <td>0.320833</td>\n",
       "      <td>0.558824</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>891 rows × 9 columns</p>\n",
       "</div>"
      ]
     },
     "execution_count": 96,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "execution_count": 96
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-03-23T08:59:32.419132Z",
     "start_time": "2025-03-23T08:59:32.415796Z"
    }
   },
   "cell_type": "code",
   "source": [
    "X_train4 = data_shuffle4[['Pclass', 'Sex', 'Age_Layer', 'Family', 'Single_Fare_Layer', 'Ticket_layer', 'Fare_Layer', 'Embarked']]\n",
    "y_train4 = data_shuffle4['Survived']"
   ],
   "id": "5949d5f5509cedd8",
   "outputs": [],
   "execution_count": 97
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-03-23T08:59:35.461798Z",
     "start_time": "2025-03-23T08:59:35.449810Z"
    }
   },
   "cell_type": "code",
   "source": [
    "from sklearn.linear_model import LogisticRegression\n",
    "clf4 = LogisticRegression().fit(X_train4, y_train4)\n",
    "clf4"
   ],
   "id": "5ff7f5b16555910",
   "outputs": [
    {
     "data": {
      "text/plain": [
       "LogisticRegression()"
      ],
      "text/html": [
       "<style>#sk-container-id-7 {\n",
       "  /* Definition of color scheme common for light and dark mode */\n",
       "  --sklearn-color-text: #000;\n",
       "  --sklearn-color-text-muted: #666;\n",
       "  --sklearn-color-line: gray;\n",
       "  /* Definition of color scheme for unfitted estimators */\n",
       "  --sklearn-color-unfitted-level-0: #fff5e6;\n",
       "  --sklearn-color-unfitted-level-1: #f6e4d2;\n",
       "  --sklearn-color-unfitted-level-2: #ffe0b3;\n",
       "  --sklearn-color-unfitted-level-3: chocolate;\n",
       "  /* Definition of color scheme for fitted estimators */\n",
       "  --sklearn-color-fitted-level-0: #f0f8ff;\n",
       "  --sklearn-color-fitted-level-1: #d4ebff;\n",
       "  --sklearn-color-fitted-level-2: #b3dbfd;\n",
       "  --sklearn-color-fitted-level-3: cornflowerblue;\n",
       "\n",
       "  /* Specific color for light theme */\n",
       "  --sklearn-color-text-on-default-background: var(--sg-text-color, var(--theme-code-foreground, var(--jp-content-font-color1, black)));\n",
       "  --sklearn-color-background: var(--sg-background-color, var(--theme-background, var(--jp-layout-color0, white)));\n",
       "  --sklearn-color-border-box: var(--sg-text-color, var(--theme-code-foreground, var(--jp-content-font-color1, black)));\n",
       "  --sklearn-color-icon: #696969;\n",
       "\n",
       "  @media (prefers-color-scheme: dark) {\n",
       "    /* Redefinition of color scheme for dark theme */\n",
       "    --sklearn-color-text-on-default-background: var(--sg-text-color, var(--theme-code-foreground, var(--jp-content-font-color1, white)));\n",
       "    --sklearn-color-background: var(--sg-background-color, var(--theme-background, var(--jp-layout-color0, #111)));\n",
       "    --sklearn-color-border-box: var(--sg-text-color, var(--theme-code-foreground, var(--jp-content-font-color1, white)));\n",
       "    --sklearn-color-icon: #878787;\n",
       "  }\n",
       "}\n",
       "\n",
       "#sk-container-id-7 {\n",
       "  color: var(--sklearn-color-text);\n",
       "}\n",
       "\n",
       "#sk-container-id-7 pre {\n",
       "  padding: 0;\n",
       "}\n",
       "\n",
       "#sk-container-id-7 input.sk-hidden--visually {\n",
       "  border: 0;\n",
       "  clip: rect(1px 1px 1px 1px);\n",
       "  clip: rect(1px, 1px, 1px, 1px);\n",
       "  height: 1px;\n",
       "  margin: -1px;\n",
       "  overflow: hidden;\n",
       "  padding: 0;\n",
       "  position: absolute;\n",
       "  width: 1px;\n",
       "}\n",
       "\n",
       "#sk-container-id-7 div.sk-dashed-wrapped {\n",
       "  border: 1px dashed var(--sklearn-color-line);\n",
       "  margin: 0 0.4em 0.5em 0.4em;\n",
       "  box-sizing: border-box;\n",
       "  padding-bottom: 0.4em;\n",
       "  background-color: var(--sklearn-color-background);\n",
       "}\n",
       "\n",
       "#sk-container-id-7 div.sk-container {\n",
       "  /* jupyter's `normalize.less` sets `[hidden] { display: none; }`\n",
       "     but bootstrap.min.css set `[hidden] { display: none !important; }`\n",
       "     so we also need the `!important` here to be able to override the\n",
       "     default hidden behavior on the sphinx rendered scikit-learn.org.\n",
       "     See: https://github.com/scikit-learn/scikit-learn/issues/21755 */\n",
       "  display: inline-block !important;\n",
       "  position: relative;\n",
       "}\n",
       "\n",
       "#sk-container-id-7 div.sk-text-repr-fallback {\n",
       "  display: none;\n",
       "}\n",
       "\n",
       "div.sk-parallel-item,\n",
       "div.sk-serial,\n",
       "div.sk-item {\n",
       "  /* draw centered vertical line to link estimators */\n",
       "  background-image: linear-gradient(var(--sklearn-color-text-on-default-background), var(--sklearn-color-text-on-default-background));\n",
       "  background-size: 2px 100%;\n",
       "  background-repeat: no-repeat;\n",
       "  background-position: center center;\n",
       "}\n",
       "\n",
       "/* Parallel-specific style estimator block */\n",
       "\n",
       "#sk-container-id-7 div.sk-parallel-item::after {\n",
       "  content: \"\";\n",
       "  width: 100%;\n",
       "  border-bottom: 2px solid var(--sklearn-color-text-on-default-background);\n",
       "  flex-grow: 1;\n",
       "}\n",
       "\n",
       "#sk-container-id-7 div.sk-parallel {\n",
       "  display: flex;\n",
       "  align-items: stretch;\n",
       "  justify-content: center;\n",
       "  background-color: var(--sklearn-color-background);\n",
       "  position: relative;\n",
       "}\n",
       "\n",
       "#sk-container-id-7 div.sk-parallel-item {\n",
       "  display: flex;\n",
       "  flex-direction: column;\n",
       "}\n",
       "\n",
       "#sk-container-id-7 div.sk-parallel-item:first-child::after {\n",
       "  align-self: flex-end;\n",
       "  width: 50%;\n",
       "}\n",
       "\n",
       "#sk-container-id-7 div.sk-parallel-item:last-child::after {\n",
       "  align-self: flex-start;\n",
       "  width: 50%;\n",
       "}\n",
       "\n",
       "#sk-container-id-7 div.sk-parallel-item:only-child::after {\n",
       "  width: 0;\n",
       "}\n",
       "\n",
       "/* Serial-specific style estimator block */\n",
       "\n",
       "#sk-container-id-7 div.sk-serial {\n",
       "  display: flex;\n",
       "  flex-direction: column;\n",
       "  align-items: center;\n",
       "  background-color: var(--sklearn-color-background);\n",
       "  padding-right: 1em;\n",
       "  padding-left: 1em;\n",
       "}\n",
       "\n",
       "\n",
       "/* Toggleable style: style used for estimator/Pipeline/ColumnTransformer box that is\n",
       "clickable and can be expanded/collapsed.\n",
       "- Pipeline and ColumnTransformer use this feature and define the default style\n",
       "- Estimators will overwrite some part of the style using the `sk-estimator` class\n",
       "*/\n",
       "\n",
       "/* Pipeline and ColumnTransformer style (default) */\n",
       "\n",
       "#sk-container-id-7 div.sk-toggleable {\n",
       "  /* Default theme specific background. It is overwritten whether we have a\n",
       "  specific estimator or a Pipeline/ColumnTransformer */\n",
       "  background-color: var(--sklearn-color-background);\n",
       "}\n",
       "\n",
       "/* Toggleable label */\n",
       "#sk-container-id-7 label.sk-toggleable__label {\n",
       "  cursor: pointer;\n",
       "  display: flex;\n",
       "  width: 100%;\n",
       "  margin-bottom: 0;\n",
       "  padding: 0.5em;\n",
       "  box-sizing: border-box;\n",
       "  text-align: center;\n",
       "  align-items: start;\n",
       "  justify-content: space-between;\n",
       "  gap: 0.5em;\n",
       "}\n",
       "\n",
       "#sk-container-id-7 label.sk-toggleable__label .caption {\n",
       "  font-size: 0.6rem;\n",
       "  font-weight: lighter;\n",
       "  color: var(--sklearn-color-text-muted);\n",
       "}\n",
       "\n",
       "#sk-container-id-7 label.sk-toggleable__label-arrow:before {\n",
       "  /* Arrow on the left of the label */\n",
       "  content: \"▸\";\n",
       "  float: left;\n",
       "  margin-right: 0.25em;\n",
       "  color: var(--sklearn-color-icon);\n",
       "}\n",
       "\n",
       "#sk-container-id-7 label.sk-toggleable__label-arrow:hover:before {\n",
       "  color: var(--sklearn-color-text);\n",
       "}\n",
       "\n",
       "/* Toggleable content - dropdown */\n",
       "\n",
       "#sk-container-id-7 div.sk-toggleable__content {\n",
       "  max-height: 0;\n",
       "  max-width: 0;\n",
       "  overflow: hidden;\n",
       "  text-align: left;\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-unfitted-level-0);\n",
       "}\n",
       "\n",
       "#sk-container-id-7 div.sk-toggleable__content.fitted {\n",
       "  /* fitted */\n",
       "  background-color: var(--sklearn-color-fitted-level-0);\n",
       "}\n",
       "\n",
       "#sk-container-id-7 div.sk-toggleable__content pre {\n",
       "  margin: 0.2em;\n",
       "  border-radius: 0.25em;\n",
       "  color: var(--sklearn-color-text);\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-unfitted-level-0);\n",
       "}\n",
       "\n",
       "#sk-container-id-7 div.sk-toggleable__content.fitted pre {\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-fitted-level-0);\n",
       "}\n",
       "\n",
       "#sk-container-id-7 input.sk-toggleable__control:checked~div.sk-toggleable__content {\n",
       "  /* Expand drop-down */\n",
       "  max-height: 200px;\n",
       "  max-width: 100%;\n",
       "  overflow: auto;\n",
       "}\n",
       "\n",
       "#sk-container-id-7 input.sk-toggleable__control:checked~label.sk-toggleable__label-arrow:before {\n",
       "  content: \"▾\";\n",
       "}\n",
       "\n",
       "/* Pipeline/ColumnTransformer-specific style */\n",
       "\n",
       "#sk-container-id-7 div.sk-label input.sk-toggleable__control:checked~label.sk-toggleable__label {\n",
       "  color: var(--sklearn-color-text);\n",
       "  background-color: var(--sklearn-color-unfitted-level-2);\n",
       "}\n",
       "\n",
       "#sk-container-id-7 div.sk-label.fitted input.sk-toggleable__control:checked~label.sk-toggleable__label {\n",
       "  background-color: var(--sklearn-color-fitted-level-2);\n",
       "}\n",
       "\n",
       "/* Estimator-specific style */\n",
       "\n",
       "/* Colorize estimator box */\n",
       "#sk-container-id-7 div.sk-estimator input.sk-toggleable__control:checked~label.sk-toggleable__label {\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-unfitted-level-2);\n",
       "}\n",
       "\n",
       "#sk-container-id-7 div.sk-estimator.fitted input.sk-toggleable__control:checked~label.sk-toggleable__label {\n",
       "  /* fitted */\n",
       "  background-color: var(--sklearn-color-fitted-level-2);\n",
       "}\n",
       "\n",
       "#sk-container-id-7 div.sk-label label.sk-toggleable__label,\n",
       "#sk-container-id-7 div.sk-label label {\n",
       "  /* The background is the default theme color */\n",
       "  color: var(--sklearn-color-text-on-default-background);\n",
       "}\n",
       "\n",
       "/* On hover, darken the color of the background */\n",
       "#sk-container-id-7 div.sk-label:hover label.sk-toggleable__label {\n",
       "  color: var(--sklearn-color-text);\n",
       "  background-color: var(--sklearn-color-unfitted-level-2);\n",
       "}\n",
       "\n",
       "/* Label box, darken color on hover, fitted */\n",
       "#sk-container-id-7 div.sk-label.fitted:hover label.sk-toggleable__label.fitted {\n",
       "  color: var(--sklearn-color-text);\n",
       "  background-color: var(--sklearn-color-fitted-level-2);\n",
       "}\n",
       "\n",
       "/* Estimator label */\n",
       "\n",
       "#sk-container-id-7 div.sk-label label {\n",
       "  font-family: monospace;\n",
       "  font-weight: bold;\n",
       "  display: inline-block;\n",
       "  line-height: 1.2em;\n",
       "}\n",
       "\n",
       "#sk-container-id-7 div.sk-label-container {\n",
       "  text-align: center;\n",
       "}\n",
       "\n",
       "/* Estimator-specific */\n",
       "#sk-container-id-7 div.sk-estimator {\n",
       "  font-family: monospace;\n",
       "  border: 1px dotted var(--sklearn-color-border-box);\n",
       "  border-radius: 0.25em;\n",
       "  box-sizing: border-box;\n",
       "  margin-bottom: 0.5em;\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-unfitted-level-0);\n",
       "}\n",
       "\n",
       "#sk-container-id-7 div.sk-estimator.fitted {\n",
       "  /* fitted */\n",
       "  background-color: var(--sklearn-color-fitted-level-0);\n",
       "}\n",
       "\n",
       "/* on hover */\n",
       "#sk-container-id-7 div.sk-estimator:hover {\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-unfitted-level-2);\n",
       "}\n",
       "\n",
       "#sk-container-id-7 div.sk-estimator.fitted:hover {\n",
       "  /* fitted */\n",
       "  background-color: var(--sklearn-color-fitted-level-2);\n",
       "}\n",
       "\n",
       "/* Specification for estimator info (e.g. \"i\" and \"?\") */\n",
       "\n",
       "/* Common style for \"i\" and \"?\" */\n",
       "\n",
       ".sk-estimator-doc-link,\n",
       "a:link.sk-estimator-doc-link,\n",
       "a:visited.sk-estimator-doc-link {\n",
       "  float: right;\n",
       "  font-size: smaller;\n",
       "  line-height: 1em;\n",
       "  font-family: monospace;\n",
       "  background-color: var(--sklearn-color-background);\n",
       "  border-radius: 1em;\n",
       "  height: 1em;\n",
       "  width: 1em;\n",
       "  text-decoration: none !important;\n",
       "  margin-left: 0.5em;\n",
       "  text-align: center;\n",
       "  /* unfitted */\n",
       "  border: var(--sklearn-color-unfitted-level-1) 1pt solid;\n",
       "  color: var(--sklearn-color-unfitted-level-1);\n",
       "}\n",
       "\n",
       ".sk-estimator-doc-link.fitted,\n",
       "a:link.sk-estimator-doc-link.fitted,\n",
       "a:visited.sk-estimator-doc-link.fitted {\n",
       "  /* fitted */\n",
       "  border: var(--sklearn-color-fitted-level-1) 1pt solid;\n",
       "  color: var(--sklearn-color-fitted-level-1);\n",
       "}\n",
       "\n",
       "/* On hover */\n",
       "div.sk-estimator:hover .sk-estimator-doc-link:hover,\n",
       ".sk-estimator-doc-link:hover,\n",
       "div.sk-label-container:hover .sk-estimator-doc-link:hover,\n",
       ".sk-estimator-doc-link:hover {\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-unfitted-level-3);\n",
       "  color: var(--sklearn-color-background);\n",
       "  text-decoration: none;\n",
       "}\n",
       "\n",
       "div.sk-estimator.fitted:hover .sk-estimator-doc-link.fitted:hover,\n",
       ".sk-estimator-doc-link.fitted:hover,\n",
       "div.sk-label-container:hover .sk-estimator-doc-link.fitted:hover,\n",
       ".sk-estimator-doc-link.fitted:hover {\n",
       "  /* fitted */\n",
       "  background-color: var(--sklearn-color-fitted-level-3);\n",
       "  color: var(--sklearn-color-background);\n",
       "  text-decoration: none;\n",
       "}\n",
       "\n",
       "/* Span, style for the box shown on hovering the info icon */\n",
       ".sk-estimator-doc-link span {\n",
       "  display: none;\n",
       "  z-index: 9999;\n",
       "  position: relative;\n",
       "  font-weight: normal;\n",
       "  right: .2ex;\n",
       "  padding: .5ex;\n",
       "  margin: .5ex;\n",
       "  width: min-content;\n",
       "  min-width: 20ex;\n",
       "  max-width: 50ex;\n",
       "  color: var(--sklearn-color-text);\n",
       "  box-shadow: 2pt 2pt 4pt #999;\n",
       "  /* unfitted */\n",
       "  background: var(--sklearn-color-unfitted-level-0);\n",
       "  border: .5pt solid var(--sklearn-color-unfitted-level-3);\n",
       "}\n",
       "\n",
       ".sk-estimator-doc-link.fitted span {\n",
       "  /* fitted */\n",
       "  background: var(--sklearn-color-fitted-level-0);\n",
       "  border: var(--sklearn-color-fitted-level-3);\n",
       "}\n",
       "\n",
       ".sk-estimator-doc-link:hover span {\n",
       "  display: block;\n",
       "}\n",
       "\n",
       "/* \"?\"-specific style due to the `<a>` HTML tag */\n",
       "\n",
       "#sk-container-id-7 a.estimator_doc_link {\n",
       "  float: right;\n",
       "  font-size: 1rem;\n",
       "  line-height: 1em;\n",
       "  font-family: monospace;\n",
       "  background-color: var(--sklearn-color-background);\n",
       "  border-radius: 1rem;\n",
       "  height: 1rem;\n",
       "  width: 1rem;\n",
       "  text-decoration: none;\n",
       "  /* unfitted */\n",
       "  color: var(--sklearn-color-unfitted-level-1);\n",
       "  border: var(--sklearn-color-unfitted-level-1) 1pt solid;\n",
       "}\n",
       "\n",
       "#sk-container-id-7 a.estimator_doc_link.fitted {\n",
       "  /* fitted */\n",
       "  border: var(--sklearn-color-fitted-level-1) 1pt solid;\n",
       "  color: var(--sklearn-color-fitted-level-1);\n",
       "}\n",
       "\n",
       "/* On hover */\n",
       "#sk-container-id-7 a.estimator_doc_link:hover {\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-unfitted-level-3);\n",
       "  color: var(--sklearn-color-background);\n",
       "  text-decoration: none;\n",
       "}\n",
       "\n",
       "#sk-container-id-7 a.estimator_doc_link.fitted:hover {\n",
       "  /* fitted */\n",
       "  background-color: var(--sklearn-color-fitted-level-3);\n",
       "}\n",
       "</style><div id=\"sk-container-id-7\" class=\"sk-top-container\"><div class=\"sk-text-repr-fallback\"><pre>LogisticRegression()</pre><b>In a Jupyter environment, please rerun this cell to show the HTML representation or trust the notebook. <br />On GitHub, the HTML representation is unable to render, please try loading this page with nbviewer.org.</b></div><div class=\"sk-container\" hidden><div class=\"sk-item\"><div class=\"sk-estimator fitted sk-toggleable\"><input class=\"sk-toggleable__control sk-hidden--visually\" id=\"sk-estimator-id-7\" type=\"checkbox\" checked><label for=\"sk-estimator-id-7\" class=\"sk-toggleable__label fitted sk-toggleable__label-arrow\"><div><div>LogisticRegression</div></div><div><a class=\"sk-estimator-doc-link fitted\" rel=\"noreferrer\" target=\"_blank\" href=\"https://scikit-learn.org/1.6/modules/generated/sklearn.linear_model.LogisticRegression.html\">?<span>Documentation for LogisticRegression</span></a><span class=\"sk-estimator-doc-link fitted\">i<span>Fitted</span></span></div></label><div class=\"sk-toggleable__content fitted\"><pre>LogisticRegression()</pre></div> </div></div></div></div>"
      ]
     },
     "execution_count": 98,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "execution_count": 98
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-03-23T08:59:37.553459Z",
     "start_time": "2025-03-23T08:59:37.492087Z"
    }
   },
   "cell_type": "code",
   "source": [
    "from sklearn.model_selection import cross_val_score\n",
    "cv10 = cross_val_score(clf4, X_train4, y_train4, cv=10, scoring='accuracy')\n",
    "cv10"
   ],
   "id": "7403b16614fcc553",
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([0.78888889, 0.80898876, 0.86516854, 0.78651685, 0.85393258,\n",
       "       0.7752809 , 0.86516854, 0.82022472, 0.76404494, 0.79775281])"
      ]
     },
     "execution_count": 99,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "execution_count": 99
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-03-23T08:59:38.341063Z",
     "start_time": "2025-03-23T08:59:38.336719Z"
    }
   },
   "cell_type": "code",
   "source": "cv10.sum() / 10",
   "id": "829411f867f404de",
   "outputs": [
    {
     "data": {
      "text/plain": [
       "np.float64(0.8125967540574284)"
      ]
     },
     "execution_count": 100,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "execution_count": 100
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-03-23T08:59:41.036913Z",
     "start_time": "2025-03-23T08:59:41.031566Z"
    }
   },
   "cell_type": "code",
   "source": "y_pred4 = clf4.predict(X_train4)",
   "id": "4cc44eb434c94c97",
   "outputs": [],
   "execution_count": 101
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-03-23T08:59:41.882779Z",
     "start_time": "2025-03-23T08:59:41.876408Z"
    }
   },
   "cell_type": "code",
   "source": [
    "from sklearn.metrics import confusion_matrix, classification_report\n",
    "confusion_matrix(y_train4, y_pred4)"
   ],
   "id": "2683df9ebbc3fc28",
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[487,  62],\n",
       "       [100, 242]])"
      ]
     },
     "execution_count": 102,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "execution_count": 102
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-03-23T08:59:42.881869Z",
     "start_time": "2025-03-23T08:59:42.874267Z"
    }
   },
   "cell_type": "code",
   "source": "print(classification_report(y_train4, y_pred4))",
   "id": "caddb00598b2d0ca",
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "              precision    recall  f1-score   support\n",
      "\n",
      "           0       0.83      0.89      0.86       549\n",
      "           1       0.80      0.71      0.75       342\n",
      "\n",
      "    accuracy                           0.82       891\n",
      "   macro avg       0.81      0.80      0.80       891\n",
      "weighted avg       0.82      0.82      0.82       891\n",
      "\n"
     ]
    }
   ],
   "execution_count": 103
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-03-23T08:59:48.529375Z",
     "start_time": "2025-03-23T08:59:48.522278Z"
    }
   },
   "cell_type": "code",
   "source": "y_proba4 = clf4.predict_proba(X_train4)[:, 1]",
   "id": "4b9a0777504160b9",
   "outputs": [],
   "execution_count": 104
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-03-23T08:59:49.625985Z",
     "start_time": "2025-03-23T08:59:49.617749Z"
    }
   },
   "cell_type": "code",
   "source": [
    "from sklearn.metrics import roc_auc_score, roc_curve\n",
    "roc_auc_score(y_train4, y_proba4)"
   ],
   "id": "7354c7f786983099",
   "outputs": [
    {
     "data": {
      "text/plain": [
       "np.float64(0.8646369262561382)"
      ]
     },
     "execution_count": 105,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "execution_count": 105
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-03-23T08:59:52.307142Z",
     "start_time": "2025-03-23T08:59:52.244462Z"
    }
   },
   "cell_type": "code",
   "source": [
    "fpr, tpr, thresholds = roc_curve(y_train4, y_proba4)\n",
    "plt.figure(figsize=(6, 6))\n",
    "plt.plot(fpr, tpr)\n",
    "plt.plot([0, 1], [0, 1], 'k--')\n",
    "plt.axis((0, 1, 0, 1))\n",
    "plt.xlabel('FPR', fontsize=12)\n",
    "plt.ylabel('TPR', fontsize=12)"
   ],
   "id": "4ccb3f90cf1fa405",
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Text(0, 0.5, 'TPR')"
      ]
     },
     "execution_count": 106,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "text/plain": [
       "<Figure size 600x600 with 1 Axes>"
      ],
      "image/png": "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VoPrucG3sgOcbBTo7lcZlhZyPSYk+teRI0fQoUMHZGVloU2bNti5cyesrQ3/jC2WEyIyeek5Kiw+eANbTt9HUmYeAMDT0QpWisKlo4qzNT5qUxOvVJHWFVzJNB0+fBgdOnRAdnY22rZti99//90oignAckJEJuxRvho//3ELS6JvICP339N1RwbVQGi7OpCbcTcNSdPTxSQ4OBg7duwwmmICsJwQkQm6nZyNg1eTsDDqOh78M1JSx80OH7etiaZVneHuYClyQqLns7Ozg1KpxGuvvYYdO3bAyspK7EjliuWEiEzK9jOx+HTjWe3tyk5WGNO+Nrr4enKkhAxG48aNcfToUVStWtXoignAckJERkatETBqwxlcisso8v6bydna76d1ro/e/lWgNOcBrSR9UVFRsLCwQMuWLQEAdevWFTmR7rCcEJFRuRyfgV1/x79wvSlv1segFtX0kIjo5UVGRqJz586Qy+U4evQofHx8xI6kUywnRGRUnsxP0tDTHlPebFDkOtYKORp4GMbVWYn279+Pzp07Izc3F506dUKdOnXEjqRzLCdEZFRuJD0uJ408HdG8mrPIaYheTkREBLp06YLc3Fy8+eab+O2336BUKsWOpXPGMZUcEdE/npSTGhUNe/puon379mlHTDp37mwyxQTgyAkRGYGsvAJsOxOLPJUaZ++mAQBquNqKG4roJRw/fhxdunRBXl4eunbtik2bNkGhUIgdS29YTojIIGk0AlKy8wEA03defOYg2FosJ2TAfH19ERwcDAsLC2zcuNGkignAckJEBqhArUHPZX/i1J2H2mVmMuBNHw+YyQCfyo6o7GQ8s2WS6VEqldiyZQtkMpnJFROA5YSIDNDPR29ri4lMBshlMnzUpiY+Da4tcjKistu1axcOHjyIuXPnQiaTmczxJUVhOSEig3L/YQ7mR1wFAMx5pxF6NqsiciKil7dz50688847UKlUaNSoEQYMGCB2JFGxnBCRKARBQK5KU+rHTdlxEY9UajT3dsa7fl46SEakXzt27MC7774LlUqFd999F7179xY7kuhYTohI73JVary75BjOx6aX6fEWchm+fLshzHgtHDJw27dvR48ePaBSqdCzZ0/8+uuvMDfnRzO3ABHpxZ2UbPx44DrSHqmQlJlX5mICAKHt6qCmq105piPSv23btqFHjx4oKChAr1698Msv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"
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "execution_count": 106
  },
  {
   "metadata": {},
   "cell_type": "markdown",
   "source": "***收效甚微***",
   "id": "1498d7f602d03247"
  },
  {
   "metadata": {},
   "cell_type": "markdown",
   "source": "## 六、提交答案",
   "id": "812116c97368d30b"
  },
  {
   "metadata": {},
   "cell_type": "markdown",
   "source": "### 数据预处理",
   "id": "c51d64347aca01ba"
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-03-23T09:00:00.449317Z",
     "start_time": "2025-03-23T09:00:00.443901Z"
    }
   },
   "cell_type": "code",
   "source": [
    "lack = [k for k in df2.columns if df2[k].isna().any()]\n",
    "lack"
   ],
   "id": "ffea70247684f05a",
   "outputs": [
    {
     "data": {
      "text/plain": [
       "['Age', 'Fare', 'Cabin']"
      ]
     },
     "execution_count": 107,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "execution_count": 107
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-03-23T09:00:02.327569Z",
     "start_time": "2025-03-23T09:00:02.312783Z"
    }
   },
   "cell_type": "code",
   "source": [
    "df2['Name'] = df2['Name'].map(lambda x: x.split(',')[1].split('.')[0].strip())\n",
    "age = []\n",
    "for row in df2[['Name', 'Age']].itertuples(index=False):\n",
    "    if pd.isna(row[1]):\n",
    "        age.append(age_nan_values.loc[row[0]].values[0])\n",
    "    else:\n",
    "        age.append(row[1])\n",
    "df2['Age'] = pd.Series(age)\n",
    "df2"
   ],
   "id": "f3f27a47fb291909",
   "outputs": [
    {
     "data": {
      "text/plain": [
       "     PassengerId  Pclass    Name     Sex   Age  SibSp  Parch  \\\n",
       "0            892       3      Mr    male  34.5      0      0   \n",
       "1            893       3     Mrs  female  47.0      1      0   \n",
       "2            894       2      Mr    male  62.0      0      0   \n",
       "3            895       3      Mr    male  27.0      0      0   \n",
       "4            896       3     Mrs  female  22.0      1      1   \n",
       "..           ...     ...     ...     ...   ...    ...    ...   \n",
       "413         1305       3      Mr    male  32.0      0      0   \n",
       "414         1306       1    Dona  female  39.0      0      0   \n",
       "415         1307       3      Mr    male  38.5      0      0   \n",
       "416         1308       3      Mr    male  32.0      0      0   \n",
       "417         1309       3  Master    male   5.0      1      1   \n",
       "\n",
       "                 Ticket      Fare Cabin Embarked  \n",
       "0                330911    7.8292   NaN        Q  \n",
       "1                363272    7.0000   NaN        S  \n",
       "2                240276    9.6875   NaN        Q  \n",
       "3                315154    8.6625   NaN        S  \n",
       "4               3101298   12.2875   NaN        S  \n",
       "..                  ...       ...   ...      ...  \n",
       "413           A.5. 3236    8.0500   NaN        S  \n",
       "414            PC 17758  108.9000  C105        C  \n",
       "415  SOTON/O.Q. 3101262    7.2500   NaN        S  \n",
       "416              359309    8.0500   NaN        S  \n",
       "417                2668   22.3583   NaN        C  \n",
       "\n",
       "[418 rows x 11 columns]"
      ],
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>PassengerId</th>\n",
       "      <th>Pclass</th>\n",
       "      <th>Name</th>\n",
       "      <th>Sex</th>\n",
       "      <th>Age</th>\n",
       "      <th>SibSp</th>\n",
       "      <th>Parch</th>\n",
       "      <th>Ticket</th>\n",
       "      <th>Fare</th>\n",
       "      <th>Cabin</th>\n",
       "      <th>Embarked</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>892</td>\n",
       "      <td>3</td>\n",
       "      <td>Mr</td>\n",
       "      <td>male</td>\n",
       "      <td>34.5</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>330911</td>\n",
       "      <td>7.8292</td>\n",
       "      <td>NaN</td>\n",
       "      <td>Q</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>893</td>\n",
       "      <td>3</td>\n",
       "      <td>Mrs</td>\n",
       "      <td>female</td>\n",
       "      <td>47.0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>363272</td>\n",
       "      <td>7.0000</td>\n",
       "      <td>NaN</td>\n",
       "      <td>S</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>894</td>\n",
       "      <td>2</td>\n",
       "      <td>Mr</td>\n",
       "      <td>male</td>\n",
       "      <td>62.0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>240276</td>\n",
       "      <td>9.6875</td>\n",
       "      <td>NaN</td>\n",
       "      <td>Q</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>895</td>\n",
       "      <td>3</td>\n",
       "      <td>Mr</td>\n",
       "      <td>male</td>\n",
       "      <td>27.0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>315154</td>\n",
       "      <td>8.6625</td>\n",
       "      <td>NaN</td>\n",
       "      <td>S</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>896</td>\n",
       "      <td>3</td>\n",
       "      <td>Mrs</td>\n",
       "      <td>female</td>\n",
       "      <td>22.0</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>3101298</td>\n",
       "      <td>12.2875</td>\n",
       "      <td>NaN</td>\n",
       "      <td>S</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>...</th>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>413</th>\n",
       "      <td>1305</td>\n",
       "      <td>3</td>\n",
       "      <td>Mr</td>\n",
       "      <td>male</td>\n",
       "      <td>32.0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>A.5. 3236</td>\n",
       "      <td>8.0500</td>\n",
       "      <td>NaN</td>\n",
       "      <td>S</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>414</th>\n",
       "      <td>1306</td>\n",
       "      <td>1</td>\n",
       "      <td>Dona</td>\n",
       "      <td>female</td>\n",
       "      <td>39.0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>PC 17758</td>\n",
       "      <td>108.9000</td>\n",
       "      <td>C105</td>\n",
       "      <td>C</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>415</th>\n",
       "      <td>1307</td>\n",
       "      <td>3</td>\n",
       "      <td>Mr</td>\n",
       "      <td>male</td>\n",
       "      <td>38.5</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>SOTON/O.Q. 3101262</td>\n",
       "      <td>7.2500</td>\n",
       "      <td>NaN</td>\n",
       "      <td>S</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>416</th>\n",
       "      <td>1308</td>\n",
       "      <td>3</td>\n",
       "      <td>Mr</td>\n",
       "      <td>male</td>\n",
       "      <td>32.0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>359309</td>\n",
       "      <td>8.0500</td>\n",
       "      <td>NaN</td>\n",
       "      <td>S</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>417</th>\n",
       "      <td>1309</td>\n",
       "      <td>3</td>\n",
       "      <td>Master</td>\n",
       "      <td>male</td>\n",
       "      <td>5.0</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>2668</td>\n",
       "      <td>22.3583</td>\n",
       "      <td>NaN</td>\n",
       "      <td>C</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>418 rows × 11 columns</p>\n",
       "</div>"
      ]
     },
     "execution_count": 108,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "execution_count": 108
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-03-23T09:00:21.849222Z",
     "start_time": "2025-03-23T09:00:21.840691Z"
    }
   },
   "cell_type": "code",
   "source": [
    "total_mean = (df2['Fare'].mean() + df1['Fare'].mean()) / 2\n",
    "df2['Fare'] = df2['Fare'].fillna(total_mean)\n",
    "df2"
   ],
   "id": "b8ef7bdbb4f21953",
   "outputs": [
    {
     "data": {
      "text/plain": [
       "     PassengerId  Pclass    Name     Sex   Age  SibSp  Parch  \\\n",
       "0            892       3      Mr    male  34.5      0      0   \n",
       "1            893       3     Mrs  female  47.0      1      0   \n",
       "2            894       2      Mr    male  62.0      0      0   \n",
       "3            895       3      Mr    male  27.0      0      0   \n",
       "4            896       3     Mrs  female  22.0      1      1   \n",
       "..           ...     ...     ...     ...   ...    ...    ...   \n",
       "413         1305       3      Mr    male  32.0      0      0   \n",
       "414         1306       1    Dona  female  39.0      0      0   \n",
       "415         1307       3      Mr    male  38.5      0      0   \n",
       "416         1308       3      Mr    male  32.0      0      0   \n",
       "417         1309       3  Master    male   5.0      1      1   \n",
       "\n",
       "                 Ticket      Fare Cabin Embarked  \n",
       "0                330911    7.8292   NaN        Q  \n",
       "1                363272    7.0000   NaN        S  \n",
       "2                240276    9.6875   NaN        Q  \n",
       "3                315154    8.6625   NaN        S  \n",
       "4               3101298   12.2875   NaN        S  \n",
       "..                  ...       ...   ...      ...  \n",
       "413           A.5. 3236    8.0500   NaN        S  \n",
       "414            PC 17758  108.9000  C105        C  \n",
       "415  SOTON/O.Q. 3101262    7.2500   NaN        S  \n",
       "416              359309    8.0500   NaN        S  \n",
       "417                2668   22.3583   NaN        C  \n",
       "\n",
       "[418 rows x 11 columns]"
      ],
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>PassengerId</th>\n",
       "      <th>Pclass</th>\n",
       "      <th>Name</th>\n",
       "      <th>Sex</th>\n",
       "      <th>Age</th>\n",
       "      <th>SibSp</th>\n",
       "      <th>Parch</th>\n",
       "      <th>Ticket</th>\n",
       "      <th>Fare</th>\n",
       "      <th>Cabin</th>\n",
       "      <th>Embarked</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>892</td>\n",
       "      <td>3</td>\n",
       "      <td>Mr</td>\n",
       "      <td>male</td>\n",
       "      <td>34.5</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>330911</td>\n",
       "      <td>7.8292</td>\n",
       "      <td>NaN</td>\n",
       "      <td>Q</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>893</td>\n",
       "      <td>3</td>\n",
       "      <td>Mrs</td>\n",
       "      <td>female</td>\n",
       "      <td>47.0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>363272</td>\n",
       "      <td>7.0000</td>\n",
       "      <td>NaN</td>\n",
       "      <td>S</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>894</td>\n",
       "      <td>2</td>\n",
       "      <td>Mr</td>\n",
       "      <td>male</td>\n",
       "      <td>62.0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>240276</td>\n",
       "      <td>9.6875</td>\n",
       "      <td>NaN</td>\n",
       "      <td>Q</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>895</td>\n",
       "      <td>3</td>\n",
       "      <td>Mr</td>\n",
       "      <td>male</td>\n",
       "      <td>27.0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>315154</td>\n",
       "      <td>8.6625</td>\n",
       "      <td>NaN</td>\n",
       "      <td>S</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>896</td>\n",
       "      <td>3</td>\n",
       "      <td>Mrs</td>\n",
       "      <td>female</td>\n",
       "      <td>22.0</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>3101298</td>\n",
       "      <td>12.2875</td>\n",
       "      <td>NaN</td>\n",
       "      <td>S</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>...</th>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>413</th>\n",
       "      <td>1305</td>\n",
       "      <td>3</td>\n",
       "      <td>Mr</td>\n",
       "      <td>male</td>\n",
       "      <td>32.0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>A.5. 3236</td>\n",
       "      <td>8.0500</td>\n",
       "      <td>NaN</td>\n",
       "      <td>S</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>414</th>\n",
       "      <td>1306</td>\n",
       "      <td>1</td>\n",
       "      <td>Dona</td>\n",
       "      <td>female</td>\n",
       "      <td>39.0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>PC 17758</td>\n",
       "      <td>108.9000</td>\n",
       "      <td>C105</td>\n",
       "      <td>C</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>415</th>\n",
       "      <td>1307</td>\n",
       "      <td>3</td>\n",
       "      <td>Mr</td>\n",
       "      <td>male</td>\n",
       "      <td>38.5</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>SOTON/O.Q. 3101262</td>\n",
       "      <td>7.2500</td>\n",
       "      <td>NaN</td>\n",
       "      <td>S</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>416</th>\n",
       "      <td>1308</td>\n",
       "      <td>3</td>\n",
       "      <td>Mr</td>\n",
       "      <td>male</td>\n",
       "      <td>32.0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>359309</td>\n",
       "      <td>8.0500</td>\n",
       "      <td>NaN</td>\n",
       "      <td>S</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>417</th>\n",
       "      <td>1309</td>\n",
       "      <td>3</td>\n",
       "      <td>Master</td>\n",
       "      <td>male</td>\n",
       "      <td>5.0</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>2668</td>\n",
       "      <td>22.3583</td>\n",
       "      <td>NaN</td>\n",
       "      <td>C</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>418 rows × 11 columns</p>\n",
       "</div>"
      ]
     },
     "execution_count": 109,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "execution_count": 109
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-03-23T09:00:55.936445Z",
     "start_time": "2025-03-23T09:00:55.923412Z"
    }
   },
   "cell_type": "code",
   "source": [
    "df2['Sex'] = (df2['Sex'] == 'male').astype(int)\n",
    "df2['Family'] = df2['SibSp'] + df2['Parch'] + 1\n",
    "df2 = df2.drop(['SibSp', 'Parch'], axis=1)\n",
    "df2['Ticket'] = df2['Ticket'].map(lambda x: x.split(' ')[-1] if x != 'LINE' else 300000).astype(int)\n",
    "df2['Single_Fare'] = df2['Fare'] / df2['Family']\n",
    "df2"
   ],
   "id": "d2b51a75af640b3",
   "outputs": [
    {
     "data": {
      "text/plain": [
       "     PassengerId  Pclass    Name  Sex   Age   Ticket      Fare Cabin Embarked  \\\n",
       "0            892       3      Mr    1  34.5   330911    7.8292   NaN        Q   \n",
       "1            893       3     Mrs    0  47.0   363272    7.0000   NaN        S   \n",
       "2            894       2      Mr    1  62.0   240276    9.6875   NaN        Q   \n",
       "3            895       3      Mr    1  27.0   315154    8.6625   NaN        S   \n",
       "4            896       3     Mrs    0  22.0  3101298   12.2875   NaN        S   \n",
       "..           ...     ...     ...  ...   ...      ...       ...   ...      ...   \n",
       "413         1305       3      Mr    1  32.0     3236    8.0500   NaN        S   \n",
       "414         1306       1    Dona    0  39.0    17758  108.9000  C105        C   \n",
       "415         1307       3      Mr    1  38.5  3101262    7.2500   NaN        S   \n",
       "416         1308       3      Mr    1  32.0   359309    8.0500   NaN        S   \n",
       "417         1309       3  Master    1   5.0     2668   22.3583   NaN        C   \n",
       "\n",
       "     Family  Single_Fare  \n",
       "0         1     7.829200  \n",
       "1         2     3.500000  \n",
       "2         1     9.687500  \n",
       "3         1     8.662500  \n",
       "4         3     4.095833  \n",
       "..      ...          ...  \n",
       "413       1     8.050000  \n",
       "414       1   108.900000  \n",
       "415       1     7.250000  \n",
       "416       1     8.050000  \n",
       "417       3     7.452767  \n",
       "\n",
       "[418 rows x 11 columns]"
      ],
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>PassengerId</th>\n",
       "      <th>Pclass</th>\n",
       "      <th>Name</th>\n",
       "      <th>Sex</th>\n",
       "      <th>Age</th>\n",
       "      <th>Ticket</th>\n",
       "      <th>Fare</th>\n",
       "      <th>Cabin</th>\n",
       "      <th>Embarked</th>\n",
       "      <th>Family</th>\n",
       "      <th>Single_Fare</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>892</td>\n",
       "      <td>3</td>\n",
       "      <td>Mr</td>\n",
       "      <td>1</td>\n",
       "      <td>34.5</td>\n",
       "      <td>330911</td>\n",
       "      <td>7.8292</td>\n",
       "      <td>NaN</td>\n",
       "      <td>Q</td>\n",
       "      <td>1</td>\n",
       "      <td>7.829200</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>893</td>\n",
       "      <td>3</td>\n",
       "      <td>Mrs</td>\n",
       "      <td>0</td>\n",
       "      <td>47.0</td>\n",
       "      <td>363272</td>\n",
       "      <td>7.0000</td>\n",
       "      <td>NaN</td>\n",
       "      <td>S</td>\n",
       "      <td>2</td>\n",
       "      <td>3.500000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>894</td>\n",
       "      <td>2</td>\n",
       "      <td>Mr</td>\n",
       "      <td>1</td>\n",
       "      <td>62.0</td>\n",
       "      <td>240276</td>\n",
       "      <td>9.6875</td>\n",
       "      <td>NaN</td>\n",
       "      <td>Q</td>\n",
       "      <td>1</td>\n",
       "      <td>9.687500</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>895</td>\n",
       "      <td>3</td>\n",
       "      <td>Mr</td>\n",
       "      <td>1</td>\n",
       "      <td>27.0</td>\n",
       "      <td>315154</td>\n",
       "      <td>8.6625</td>\n",
       "      <td>NaN</td>\n",
       "      <td>S</td>\n",
       "      <td>1</td>\n",
       "      <td>8.662500</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>896</td>\n",
       "      <td>3</td>\n",
       "      <td>Mrs</td>\n",
       "      <td>0</td>\n",
       "      <td>22.0</td>\n",
       "      <td>3101298</td>\n",
       "      <td>12.2875</td>\n",
       "      <td>NaN</td>\n",
       "      <td>S</td>\n",
       "      <td>3</td>\n",
       "      <td>4.095833</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>...</th>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>413</th>\n",
       "      <td>1305</td>\n",
       "      <td>3</td>\n",
       "      <td>Mr</td>\n",
       "      <td>1</td>\n",
       "      <td>32.0</td>\n",
       "      <td>3236</td>\n",
       "      <td>8.0500</td>\n",
       "      <td>NaN</td>\n",
       "      <td>S</td>\n",
       "      <td>1</td>\n",
       "      <td>8.050000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>414</th>\n",
       "      <td>1306</td>\n",
       "      <td>1</td>\n",
       "      <td>Dona</td>\n",
       "      <td>0</td>\n",
       "      <td>39.0</td>\n",
       "      <td>17758</td>\n",
       "      <td>108.9000</td>\n",
       "      <td>C105</td>\n",
       "      <td>C</td>\n",
       "      <td>1</td>\n",
       "      <td>108.900000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>415</th>\n",
       "      <td>1307</td>\n",
       "      <td>3</td>\n",
       "      <td>Mr</td>\n",
       "      <td>1</td>\n",
       "      <td>38.5</td>\n",
       "      <td>3101262</td>\n",
       "      <td>7.2500</td>\n",
       "      <td>NaN</td>\n",
       "      <td>S</td>\n",
       "      <td>1</td>\n",
       "      <td>7.250000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>416</th>\n",
       "      <td>1308</td>\n",
       "      <td>3</td>\n",
       "      <td>Mr</td>\n",
       "      <td>1</td>\n",
       "      <td>32.0</td>\n",
       "      <td>359309</td>\n",
       "      <td>8.0500</td>\n",
       "      <td>NaN</td>\n",
       "      <td>S</td>\n",
       "      <td>1</td>\n",
       "      <td>8.050000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>417</th>\n",
       "      <td>1309</td>\n",
       "      <td>3</td>\n",
       "      <td>Master</td>\n",
       "      <td>1</td>\n",
       "      <td>5.0</td>\n",
       "      <td>2668</td>\n",
       "      <td>22.3583</td>\n",
       "      <td>NaN</td>\n",
       "      <td>C</td>\n",
       "      <td>3</td>\n",
       "      <td>7.452767</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>418 rows × 11 columns</p>\n",
       "</div>"
      ]
     },
     "execution_count": 110,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "execution_count": 110
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-03-23T09:01:21.952329Z",
     "start_time": "2025-03-23T09:01:21.794628Z"
    }
   },
   "cell_type": "code",
   "source": [
    "X_text1 = pd.concat([\n",
    "    df2['Pclass'].transform(lambda x: pclass.loc[x]['Survival_Rate']), \n",
    "    df2['Sex'].transform(lambda x: sex.loc[x]['Survival_Rate']), \n",
    "    df2['Age'].transform(lambda x: age_.loc[x]['Survival_Rate']), \n",
    "    df2['Family'].transform(lambda x: family.loc[x]['Survival_Rate']), \n",
    "    df2['Single_Fare'].transform(lambda x: single_fare.loc[x]['Survival_Rate']), \n",
    "    df2['Ticket'].transform(lambda x: ticket_.loc[x]['Survival_Rate']), \n",
    "    df2['Fare'].transform(lambda x: fare.loc[x]['Survival_Rate']), \n",
    "    df2['Embarked'].transform(lambda x: embarked.loc[x]['Survival_Rate']), \n",
    "], axis=1)\n",
    "X_text1.columns = ['Pclass', 'Sex', 'Age_Layer', 'Family', 'Single_Fare_Layer', 'Ticket_layer', 'Fare_Layer', 'Embarked']\n",
    "X_text1"
   ],
   "id": "392722ed4ad67f9e",
   "outputs": [
    {
     "data": {
      "text/plain": [
       "       Pclass       Sex  Age_Layer    Family  Single_Fare_Layer  Ticket_layer  \\\n",
       "0    0.242363  0.188908   0.333333  0.303538           0.349010      0.533333   \n",
       "1    0.242363  0.742038   0.379310  0.552795           0.349010      0.303030   \n",
       "2    0.472826  0.188908   0.343750  0.303538           0.349010      0.500000   \n",
       "3    0.242363  0.188908   0.398496  0.303538           0.349010      0.176471   \n",
       "4    0.242363  0.742038   0.398496  0.578431           0.349010      0.272727   \n",
       "..        ...       ...        ...       ...                ...           ...   \n",
       "413  0.242363  0.188908   0.333333  0.303538           0.349010      0.316092   \n",
       "414  0.629630  0.742038   0.333333  0.303538           0.833333      0.651007   \n",
       "415  0.242363  0.188908   0.333333  0.303538           0.349010      0.272727   \n",
       "416  0.242363  0.188908   0.333333  0.303538           0.349010      0.200000   \n",
       "417  0.242363  0.188908   0.588235  0.578431           0.349010      0.316092   \n",
       "\n",
       "     Fare_Layer  Embarked  \n",
       "0      0.320833  0.389610  \n",
       "1      0.320833  0.336957  \n",
       "2      0.320833  0.389610  \n",
       "3      0.320833  0.336957  \n",
       "4      0.320833  0.336957  \n",
       "..          ...       ...  \n",
       "413    0.320833  0.336957  \n",
       "414    0.791667  0.558824  \n",
       "415    0.320833  0.336957  \n",
       "416    0.320833  0.336957  \n",
       "417    0.320833  0.558824  \n",
       "\n",
       "[418 rows x 8 columns]"
      ],
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Pclass</th>\n",
       "      <th>Sex</th>\n",
       "      <th>Age_Layer</th>\n",
       "      <th>Family</th>\n",
       "      <th>Single_Fare_Layer</th>\n",
       "      <th>Ticket_layer</th>\n",
       "      <th>Fare_Layer</th>\n",
       "      <th>Embarked</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>0.242363</td>\n",
       "      <td>0.188908</td>\n",
       "      <td>0.333333</td>\n",
       "      <td>0.303538</td>\n",
       "      <td>0.349010</td>\n",
       "      <td>0.533333</td>\n",
       "      <td>0.320833</td>\n",
       "      <td>0.389610</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>0.242363</td>\n",
       "      <td>0.742038</td>\n",
       "      <td>0.379310</td>\n",
       "      <td>0.552795</td>\n",
       "      <td>0.349010</td>\n",
       "      <td>0.303030</td>\n",
       "      <td>0.320833</td>\n",
       "      <td>0.336957</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>0.472826</td>\n",
       "      <td>0.188908</td>\n",
       "      <td>0.343750</td>\n",
       "      <td>0.303538</td>\n",
       "      <td>0.349010</td>\n",
       "      <td>0.500000</td>\n",
       "      <td>0.320833</td>\n",
       "      <td>0.389610</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>0.242363</td>\n",
       "      <td>0.188908</td>\n",
       "      <td>0.398496</td>\n",
       "      <td>0.303538</td>\n",
       "      <td>0.349010</td>\n",
       "      <td>0.176471</td>\n",
       "      <td>0.320833</td>\n",
       "      <td>0.336957</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>0.242363</td>\n",
       "      <td>0.742038</td>\n",
       "      <td>0.398496</td>\n",
       "      <td>0.578431</td>\n",
       "      <td>0.349010</td>\n",
       "      <td>0.272727</td>\n",
       "      <td>0.320833</td>\n",
       "      <td>0.336957</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>...</th>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>413</th>\n",
       "      <td>0.242363</td>\n",
       "      <td>0.188908</td>\n",
       "      <td>0.333333</td>\n",
       "      <td>0.303538</td>\n",
       "      <td>0.349010</td>\n",
       "      <td>0.316092</td>\n",
       "      <td>0.320833</td>\n",
       "      <td>0.336957</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>414</th>\n",
       "      <td>0.629630</td>\n",
       "      <td>0.742038</td>\n",
       "      <td>0.333333</td>\n",
       "      <td>0.303538</td>\n",
       "      <td>0.833333</td>\n",
       "      <td>0.651007</td>\n",
       "      <td>0.791667</td>\n",
       "      <td>0.558824</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>415</th>\n",
       "      <td>0.242363</td>\n",
       "      <td>0.188908</td>\n",
       "      <td>0.333333</td>\n",
       "      <td>0.303538</td>\n",
       "      <td>0.349010</td>\n",
       "      <td>0.272727</td>\n",
       "      <td>0.320833</td>\n",
       "      <td>0.336957</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>416</th>\n",
       "      <td>0.242363</td>\n",
       "      <td>0.188908</td>\n",
       "      <td>0.333333</td>\n",
       "      <td>0.303538</td>\n",
       "      <td>0.349010</td>\n",
       "      <td>0.200000</td>\n",
       "      <td>0.320833</td>\n",
       "      <td>0.336957</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>417</th>\n",
       "      <td>0.242363</td>\n",
       "      <td>0.188908</td>\n",
       "      <td>0.588235</td>\n",
       "      <td>0.578431</td>\n",
       "      <td>0.349010</td>\n",
       "      <td>0.316092</td>\n",
       "      <td>0.320833</td>\n",
       "      <td>0.558824</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>418 rows × 8 columns</p>\n",
       "</div>"
      ]
     },
     "execution_count": 111,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "execution_count": 111
  },
  {
   "metadata": {},
   "cell_type": "markdown",
   "source": "### 预测并输出结果",
   "id": "3c250ca6bd268ed8"
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-03-23T09:01:26.189926Z",
     "start_time": "2025-03-23T09:01:26.183001Z"
    }
   },
   "cell_type": "code",
   "source": [
    "Survived1 = pd.DataFrame(clf4.predict(X_text1), columns=['Survived'])\n",
    "result1 = pd.concat([df2['PassengerId'], Survived1], axis=1)\n",
    "result1"
   ],
   "id": "7058940d8f2dba38",
   "outputs": [
    {
     "data": {
      "text/plain": [
       "     PassengerId  Survived\n",
       "0            892         0\n",
       "1            893         1\n",
       "2            894         0\n",
       "3            895         0\n",
       "4            896         1\n",
       "..           ...       ...\n",
       "413         1305         0\n",
       "414         1306         1\n",
       "415         1307         0\n",
       "416         1308         0\n",
       "417         1309         0\n",
       "\n",
       "[418 rows x 2 columns]"
      ],
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>PassengerId</th>\n",
       "      <th>Survived</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>892</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>893</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>894</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>895</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>896</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>...</th>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>413</th>\n",
       "      <td>1305</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>414</th>\n",
       "      <td>1306</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>415</th>\n",
       "      <td>1307</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>416</th>\n",
       "      <td>1308</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>417</th>\n",
       "      <td>1309</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>418 rows × 2 columns</p>\n",
       "</div>"
      ]
     },
     "execution_count": 112,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "execution_count": 112
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-03-23T09:01:35.688914Z",
     "start_time": "2025-03-23T09:01:35.684162Z"
    }
   },
   "cell_type": "code",
   "source": "result1.to_csv('./../data/result1.csv', index=False)",
   "id": "49c7fc9fc5d25256",
   "outputs": [],
   "execution_count": 113
  },
  {
   "metadata": {},
   "cell_type": "markdown",
   "source": [
    "![](./../img/score1.png)\n",
    "\n",
    "***首次提交***"
   ],
   "id": "57962b3d2b1c3f10"
  },
  {
   "metadata": {},
   "cell_type": "markdown",
   "source": "### 尝试较差的模型",
   "id": "cf6fb4aba5a2280c"
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-03-23T09:05:45.341070Z",
     "start_time": "2025-03-23T09:05:45.332611Z"
    }
   },
   "cell_type": "code",
   "source": [
    "X_text2 = X_text1[['Pclass', 'Sex', 'Age_Layer', 'Family', 'Single_Fare_Layer']]\n",
    "Survived2 = pd.DataFrame(clf3.predict(X_text2), columns=['Survived'])\n",
    "result2 = pd.concat([df2['PassengerId'], Survived2], axis=1)\n",
    "result2"
   ],
   "id": "53cda38e38e665f4",
   "outputs": [
    {
     "data": {
      "text/plain": [
       "     PassengerId  Survived\n",
       "0            892         0\n",
       "1            893         1\n",
       "2            894         0\n",
       "3            895         0\n",
       "4            896         1\n",
       "..           ...       ...\n",
       "413         1305         0\n",
       "414         1306         1\n",
       "415         1307         0\n",
       "416         1308         0\n",
       "417         1309         0\n",
       "\n",
       "[418 rows x 2 columns]"
      ],
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>PassengerId</th>\n",
       "      <th>Survived</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>892</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>893</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>894</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>895</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>896</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>...</th>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>413</th>\n",
       "      <td>1305</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>414</th>\n",
       "      <td>1306</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>415</th>\n",
       "      <td>1307</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>416</th>\n",
       "      <td>1308</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>417</th>\n",
       "      <td>1309</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>418 rows × 2 columns</p>\n",
       "</div>"
      ]
     },
     "execution_count": 114,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "execution_count": 114
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-03-23T09:06:02.659443Z",
     "start_time": "2025-03-23T09:06:02.653959Z"
    }
   },
   "cell_type": "code",
   "source": "result2.to_csv('./../data/result2.csv', index=False)",
   "id": "a51f155d19de5621",
   "outputs": [],
   "execution_count": 116
  },
  {
   "metadata": {},
   "cell_type": "markdown",
   "source": [
    "![](./../img/score2.png)\n",
    "\n",
    "***clf3 实际上竟然相较于 clf4 更好***"
   ],
   "id": "a4ca9c4d1b5c9203"
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-03-23T09:13:52.830314Z",
     "start_time": "2025-03-23T09:13:52.820349Z"
    }
   },
   "cell_type": "code",
   "source": [
    "X_text3 = df2[['Pclass', 'Sex', 'Age', 'Family', 'Fare', 'Single_Fare', 'Ticket']]\n",
    "scaler_test3 = StandardScaler()\n",
    "X_scaler_test3 = scaler_test3.fit_transform(X_text3)\n",
    "Survived3 = pd.DataFrame(clf2.predict(X_scaler_test3), columns=['Survived'])\n",
    "result3 = pd.concat([df2['PassengerId'], Survived3], axis=1)\n",
    "result3"
   ],
   "id": "222afd2f7aaeb7b7",
   "outputs": [
    {
     "data": {
      "text/plain": [
       "     PassengerId  Survived\n",
       "0            892         0\n",
       "1            893         0\n",
       "2            894         0\n",
       "3            895         0\n",
       "4            896         1\n",
       "..           ...       ...\n",
       "413         1305         0\n",
       "414         1306         1\n",
       "415         1307         0\n",
       "416         1308         0\n",
       "417         1309         0\n",
       "\n",
       "[418 rows x 2 columns]"
      ],
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>PassengerId</th>\n",
       "      <th>Survived</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>892</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>893</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>894</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>895</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>896</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>...</th>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>413</th>\n",
       "      <td>1305</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>414</th>\n",
       "      <td>1306</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>415</th>\n",
       "      <td>1307</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>416</th>\n",
       "      <td>1308</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>417</th>\n",
       "      <td>1309</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>418 rows × 2 columns</p>\n",
       "</div>"
      ]
     },
     "execution_count": 117,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "execution_count": 117
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-03-23T09:14:12.740853Z",
     "start_time": "2025-03-23T09:14:12.736065Z"
    }
   },
   "cell_type": "code",
   "source": "result3.to_csv('./../data/result3.csv', index=False)",
   "id": "f1b7bb7d0645858e",
   "outputs": [],
   "execution_count": 118
  },
  {
   "metadata": {},
   "cell_type": "markdown",
   "source": [
    "![](./../img/score3.png)\n",
    "\n",
    "***clf2 与 clf4 的实际预测效果一致***"
   ],
   "id": "a03884ce73fd948c"
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-03-23T09:18:07.338917Z",
     "start_time": "2025-03-23T09:18:07.329650Z"
    }
   },
   "cell_type": "code",
   "source": [
    "X_text4 = df2[['Pclass', 'Sex', 'Age', 'Family', 'Single_Fare']]\n",
    "scaler_test4 = StandardScaler()\n",
    "X_scaler_test4 = scaler_test4.fit_transform(X_text4)\n",
    "Survived4 = pd.DataFrame(clf1.predict(X_scaler_test4), columns=['Survived'])\n",
    "result4 = pd.concat([df2['PassengerId'], Survived4], axis=1)\n",
    "result4"
   ],
   "id": "920b99786ac2a9b3",
   "outputs": [
    {
     "data": {
      "text/plain": [
       "     PassengerId  Survived\n",
       "0            892         0\n",
       "1            893         0\n",
       "2            894         0\n",
       "3            895         0\n",
       "4            896         1\n",
       "..           ...       ...\n",
       "413         1305         0\n",
       "414         1306         1\n",
       "415         1307         0\n",
       "416         1308         0\n",
       "417         1309         0\n",
       "\n",
       "[418 rows x 2 columns]"
      ],
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>PassengerId</th>\n",
       "      <th>Survived</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>892</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>893</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>894</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>895</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>896</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>...</th>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>413</th>\n",
       "      <td>1305</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>414</th>\n",
       "      <td>1306</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>415</th>\n",
       "      <td>1307</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>416</th>\n",
       "      <td>1308</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>417</th>\n",
       "      <td>1309</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>418 rows × 2 columns</p>\n",
       "</div>"
      ]
     },
     "execution_count": 120,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "execution_count": 120
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-03-23T09:18:28.333749Z",
     "start_time": "2025-03-23T09:18:28.325717Z"
    }
   },
   "cell_type": "code",
   "source": "result4.to_csv('./../data/result4.csv', index=False)",
   "id": "8dc4b301b17dd40e",
   "outputs": [],
   "execution_count": 121
  },
  {
   "metadata": {},
   "cell_type": "markdown",
   "source": [
    "![](./../img/score4.png)\n",
    "\n",
    "***clf1 是真的最差的了***"
   ],
   "id": "53f4426404607f3f"
  },
  {
   "metadata": {},
   "cell_type": "markdown",
   "source": "## 七、总结学习",
   "id": "20100710c83fb3a0"
  },
  {
   "metadata": {},
   "cell_type": "markdown",
   "source": "**首先**，从结果可以看出，训练到测试准确率是降低的，训练可能存在 **过拟合** (clf3 实际上竟然相较于 clf4 更好)。",
   "id": "e3c86e09d882fc82"
  },
  {
   "metadata": {},
   "cell_type": "markdown",
   "source": [
    "在这个做项目的过程中，数据是需要 **填充的**、**处理的**、**组合的** 和 **分组分析的**，每一个不同的选择最终都可能出现不同的训练结果。\n",
    "\n",
    "而且，在数据处理的过程中，也会有很多 **有趣的发现**，如：\n",
    "1. 当时人们的称谓所代表的阶级\n",
    "2. 上层社会的主仆关系\n",
    "3. 不同地区的贫富差距\n",
    "4. 三等票所代表的底层人的悲哀\n",
    "5. 家庭成员众多，但在生存问题上的人性自私\n",
    "6. 性别与年龄在生存问题上的人性光辉\n",
    "\n",
    "***当然，2 人的家庭生存率最高，这可能就是爱情吧！***"
   ],
   "id": "59122bc94b0d408f"
  },
  {
   "metadata": {},
   "cell_type": "markdown",
   "source": [
    "总结的时候又突然有了点想法，就留给大家吧：\n",
    "\n",
    "1. 训练集与测试集在数据预处理时是否应该放在一起处理，比如各称谓的平均年龄填充等。\n",
    "2. 称谓是否也可以作为一个特征值？\n",
    "3. 票号是否可以转换为位置特征？\n",
    "4. 费用 ( Fare | Single_Fare ) 的分层是否过多，只分三层会不会更好？\n",
    "5. 电影《泰坦尼克号》的男女主是否生存？\n",
    "\n",
    "***这些是否可以提高准确率？***"
   ],
   "id": "74af6b58e8232d23"
  },
  {
   "metadata": {},
   "cell_type": "markdown",
   "source": [
    "在这次的学习中，**只是简单的运用了逻辑回归**，加上些许的数据预处理的小技巧。\n",
    "\n",
    "如果说想要提升准确率，提升kaggle分数，那么可能就要需要学习更加高深的分类算法，如：**随机森林** | **树** | **神经网络** 等。"
   ],
   "id": "1afb78b632e7c005"
  },
  {
   "metadata": {},
   "cell_type": "markdown",
   "source": [
    "本人也是拿到了 **Kaggle的入门证书** （不知道有啥用）\n",
    "\n",
    "![](./../img/Getting%20Started%20Competitor.png)"
   ],
   "id": "e3f06cc73ff390d"
  },
  {
   "metadata": {},
   "cell_type": "markdown",
   "source": [
    "最后，知识是学无止境的，我也只是学习了些皮毛，通过这个 kaggle 项目进行一次逻辑回归的巩固练习，在未来我一定会有更好的办法去提升这次分数。\n",
    "\n",
    "***感谢大家的观看！***"
   ],
   "id": "5205b0cecb382ee9"
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 2
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython2",
   "version": "2.7.6"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
